今日分享
写一个统计异常发生次数和时间的装饰器
写一个装饰器,统计某个异常重复出现指定次数时,经历的时长。
import time
import math
def excepter(f):
i = 0
t1 = time.time()
def wrapper():
try:
f()
except Exception as e:
nonlocal i
i += 1
print(f'{e.args[0]}: {i}')
t2 = time.time()
if i == n:
print(f'spending time:{round(t2-t1,2)}')
return wrapper
关键词nonlocal
常用于函数嵌套中,声明变量i
为非局部变量;
如果不声明,i+=1
表明i为函数wrapper
内的局部变量,因为在i+=1
引用(reference
)时,i
未被声明,所以会报unreferenced variable
的错误。
使用创建的装饰函数excepter
, n
是异常出现的次数。
共测试了两类常见的异常:被零除和数组越界。
n = 10 # except count
@excepter
def divide_zero_except():
time.sleep(0.1)
j = 1/(40-20*2)
# test zero divived except
for _ in range(n):
divide_zero_except()
@excepter
def outof_range_except():
a = [1,3,5]
time.sleep(0.1)
print(a[3])
# test out of range except
for _ in range(n):
outof_range_except()
打印出来的结果如下:
division by zero: 1
division by zero: 2
division by zero: 3
division by zero: 4
division by zero: 5
division by zero: 6
division by zero: 7
division by zero: 8
division by zero: 9
division by zero: 10
spending time:1.01
list index out of range: 1
list index out of range: 2
list index out of range: 3
list index out of range: 4
list index out of range: 5
list index out of range: 6
list index out of range: 7
list index out of range: 8
list index out of range: 9
list index out of range: 10
spending time:1.01
近期小例子:求任意维度两点间距离; 两种合并字典的方法对比; 计算和聚合同时进行; groupby 分组; plotly画柱状图+折线图;
60页《Python之路1.0.pdf
》下载方式,关注《Python小例子》并在其后台回复 mypy,即可下载。
Python小例子,长按关注
后期计划:不断深入Python小例子,添加更多基于Python的小例子,不限于:PyQt制作GUI
,NumPy数值计算
,Pandas数据分析
,Sklearn机器学习实战
,Keras+TensorFlow深度学习
等。2.0版本预计在春节前发出来。
如果你想每天看到小例子的更新动态,欢迎star
这个小例子库,我们也真诚欢迎你贡献小例子,直接点击文章最下的阅读原文.