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 traceback def 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 @robust def simple(): return 5 / 0 @robust def readFile(filename): f = open(filename, "r") print len(f.readlines()) f.close() def add(a,b): return int(a)+int(b) @robust def assertSumIsPositive(*args): sum = reduce(add, *args) assert sum >= 0 @robust def 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.'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了