首页 > 代码库 > python使用装饰器捕获异常
python使用装饰器捕获异常
可以编写一个通用的捕获异常的装饰器, 当程序发生异常时可以继续执行后续动作。 尤其适合于使用大量断言的验证性程序。
装饰器的实现原理使用了回调技术。
如下所示, robust 是一个装饰器。 当在普通函数 func 加上 @robust 注解时, 即是给 func 加上了 robust 装饰。 当调用 func 时, 就会实际地执行 robust , 获取装饰后的函数 add_robust , 调用 add_robust 来完成实际的动作。 即调用: func(*arg, **keyargs) 等效于 robust(simple)(*arg, **keyargs)
#-------------------------------------------------------------------------------# Name: deco.py# Purpose: demo of decoration in python## Author: qin.shuq## Created: 27/10/2014#-------------------------------------------------------------------------------import tracebackdef robust(actual_do): def add_robust(*args, **keyargs): try: return actual_do(*args, **keyargs) except: print ‘Error execute: %s‘ % actual_do.__name__ #traceback.print_exc() return add_robust@robustdef simple(): return 5 / 0@robustdef readFile(filename): f = open(filename, "r") print len(f.readlines()) f.close()def add(a,b): return int(a)+int(b)@robustdef assertSumIsPositive(*args): sum = reduce(add, *args) assert sum >= 0@robustdef checkLen(**keyargs): if len(keyargs) < 3: raise Exception(‘Number of key args should more than 3.‘)if __name__ == ‘__main__‘: simple() readFile("UnexistFile.txt") assertSumIsPositive(1,2,-3,-4) checkLen(a=5,b=2) print ‘Yet still reach here.‘
python使用装饰器捕获异常
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。