title: time模块的应用、try...except...finally
date: 2018-04-05 20:41:39
tags: "python 基础"
今天在写Spider的时候,发现获取的数据老是不完整(应有的数据未出来),因此在完善代码的时候,加了try异常操作,睡眠时间,明显有效果。
先来小结time模块常用内置函数:
-
python time.time()
python time.time()返回当前时间的时间戳(时间戳timestamp时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲,它是一个能表示一份数据在某个特定时间之前已经存在的、完整的、可验证的数据)
time()方法的语法: time.time()
# -*-coding:utf-*-
import time
print(time.time())
>>>1522933182.9892895
-
python localtime()方法
python time.localtime()函数类似gmtime(),其作用是格式化时间戳为本地的时间
eg: time.time()
>>>time.struct_time(tm_year=2018, tm_mon=4, tm_mday=5, tm_hour=21, tm_min=3, tm_sec=2, tm_wday=3, tm_yday=95, tm_isdst=0)
若将time.time()放在localtime()会是神马? 哈哈 实验一下
>>> time.localtime(time.time())
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=5, tm_hour=21, tm_min=4, tm_sec=3, tm_wday=3, tm_yday=95, tm_isdst=0)
-
python asctime()方法
python time.asctime()函数接受时间元组并返回一个可读的形式(ps:Thu Apr 5 20:52:38 2018,2018年4月5日 周四20时53分14秒)约为24个字符的字符串
>>> time.asctime()
'Thu Apr 5 21:53:10 2018'
>>> time.asctime(time.localtime())
'Thu Apr 5 21:53:42 2018'
-
python ctime()方法
python ctime()函数把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式,如果参数未给或者为None的时候,将会默认time.time()为参数.它的作用相当于asctime(localtime(secs))
>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=5, tm_hour=22, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=95, tm_isdst=0)
>>> time.asctime(time.localtime())
'Thu Apr 5 22:00:26 2018'
>>> time.ctime()
'Thu Apr 5 22:00:31 2018'
-
python mktime()方法
python mktime()函数把一个struc_time转化为时间戳
time.mktime(time.localtime())
1523082853.0
-
python strftime()方法
Python time strftime() 函数接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。
time.strftime(format[,t]) format --格式化字符串, t-- 可选的参数t是一个struct_time对象
python中的时间日期格式化符号:
序号 | 符号 | 含义 |
---|---|---|
1 | %y | 两位数的年份表示(00-99 |
2 | %Y | 四位数的年份表示(000-9999) |
3 | %m | 月份(01-12) |
4 | %d | 月内中的一天(0-31) |
5 | %H | 24小时制小时数(0-23) |
6 | %I | 12小时制小时数(01-12) |
7 | %M | 分钟数(00=59) |
8 | %S | 秒(00-59) |
9 | %a | 本地简化星期名称 |
10 | %A | 本地完整星期名称 |
11 | %b | 本地简化的月份名称 |
12 | %B | 本地完整的月份名称 |
13 | %c | 本地相应的日期表示和时间表示 |
14 | %j | 年内的一天(001-366) |
15 | %p | 本地A.M.或P.M.的等价符 |
16 | %U | 一年中的星期数(00-53)星期天为星期的开始 |
17 | %w | 星期(0-6),星期天为星期的开始 |
18 | %W | 一年中的星期数(00-53)星期一为星期的开始 |
19 | %x | 本地相应的日期表示 |
20 | %X | 本地相应的时间表示 |
21 | %Z | 当前时区的名称 |
备注: | 1 | “%p”只有与“%I”配合使用才有效果。 |
2 | 当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%U和%W才会被计算。 |
eg:
time_format='%Y-%m-%d%X'
time_current=time.strftime(time_format)
>>> import time
>>> time_format='%Y-%m-%d %X'
>>> time_current=time.strftime(time_format)
>>> time_current
'2018-04-0714:28:06'
>>> time_format="%b %d, %Y %I:%M:%S %p"
>>> time_current=time.strftime(time_format)
>>> time_current
'Apr 20, 2018 04:35:55 PM'
>>> time.strptime('2018-04-07 14:29:25',"%Y-%m-%d %X")
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=7, tm_hour=14, tm_min=29, tm_sec=25, tm_wday=5, tm_yday=97, tm_isdst=-1)
需求写一个中间T格式的 :2017-11-18T18:42:01.211294
>>> time_format ='%Y-%m-%dT%X%S'
>>> time.strftime(time_format)
'2018-04-10T17:29:0000'
time.sleep(): 线程推迟指定的时间运行.单位为秒 (可以作为阻塞作用使用,我在爬虫中常用,为了防止被ban,可作为反爬虫一小措施,)
time.clock() 通常在python计算程序运行了多少时间
import time
start =time.clock()
a=sum(range(0,101))
print(a)
end=time.clock()
print('Running time:%s Seconds'%(end-start))
输出结果:
5050
Running time:2.8421247092743264e-05 Seconds
python的异常处理结构
- try...except...
- 其中try子句中的代码块包含可能会引发异常的语句,而except子句则用来捕捉相应的异常。
- 如果try子句中的代码引发异常并被except子句捕捉,就执行except子句的代码块;
- 如果出现异常但没有被except捕获,继续往外层抛出,如果所有层都没有捕获并处理该异常,程序崩溃并将该异常呈现给最终用户。
- 该结构语法如下:
try:
#可能会引发异常的代码,先执行一下试试
except Exception[ as reason]:
#如果try中的代码抛出异常并被except捕捉,就执行这里的代码
- try...except...else...
- 如果try中的代码抛出了异常并且被except语句捕捉则执行相应的异常处理代码,这种情况下就不会执行else中的代码;
- 如果try中的代码没有引发异常,则执行else块的代码。
- 该结构的语法如下:
#可能会引发异常的代码
except Exception [ as reason]:
#用来处理异常的代码
else:
#如果try子句中的代码没有引发异常,就继续执行这里的代码
-
try...except...finally...
在这种结构中,无论try中的代码是否发生异常,也不管抛出的异常有没有被except语句捕获,finally子句中的代码总是会得到执行。该结构语法为:
try:
#可能会引发异常的代码
except Exception [ as reason]:
#处理异常的代码
finally:
#无论try子句中的代码是否引发异常,都会执行这里的代码
可以捕捉多种异常的异常处理结构
一旦try子句中的代码抛出了异常,就按顺序依次检查与哪一个except子句匹配,如果某个except捕捉到了异常,其他的except子句将不会再尝试捕捉异常。该结构类似于多分支选择结构,语法格式为:
try:
#可能会引发异常的代码
except Exception1:
#处理异常类型1的代码
except Exception2:
#处理异常类型2的代码
except Exception3:
#处理异常类型3的代码
...
常见异常类型
BaseException:所有异常的基类
SystemExitb python:解释器请求退出
KeyboardInterruptc:用户中断执行(通常是输入^C)
Exception:常规错误的基类
异常代码 | 对应的中文一览 |
---|---|
StopIteratione | 迭代器没有更多的值 |
GeneratorExita | 生成器(generator)发生异常来通知退出 |
SystemExith | Python 解释器请求退出 |
StandardErrorg | 所有的内建标准异常的基类 |
ArithmeticErrord | 所有数值计算错误的基类 |
FloatingPointErrord | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionErrord | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentErrord | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSErrord | 操作系统错误 |
WindowsErrorh Windows | 系统调用失败 |
ImportError | 导入模块/对象失败 |
KeyboardInterruptf | 用户中断执行(通常是输入^C) |
LookupErrord | 无效数据查询的基类 |
IndexError | 序列中没有没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
UnboundLocalErrorh | 访问未初始化的本地变量 |
ReferenceErrore | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedErrord | 尚未实现的方法 |
IndentationErrorg | 缩进错误 |
TabErrorg | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
ValueError | 传入无效的参数 |
UnicodeErrorh | Unicode 相关的错误 |
UnicodeDecodeErrori | Unicode 解码时的错误 |
UnicodeEncodeErrori | Unicode 编码时错误 |
UnicodeTranslateErrorf | Unicode 转换时错误 |
DeprecationWarningj | 关于被弃用的特征的警告 |
FutureWarningi | 关于构造将来语义会有改变的警告 |
PendingDeprecationWarningi | 关于特性将会被废弃的警告 |
RuntimeWarningj | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarningj | 可疑的语法的警告 |
UserWarningj | 用户代码生成的警告 |