【发布时间】:2012-03-27 16:03:35
【问题描述】:
许多 try/except/finally 子句不仅“丑化”了我的代码,而且我发现自己经常对类似任务使用相同的异常处理。所以我正在考虑通过将它们“外包”给......装饰者来减少冗余。
因为我确定不是第一个得出这个结论的人,所以我在 Google 上搜索并发现了这个 - 恕我直言 - 巧妙的 recipe,它增加了处理多个异常的可能性。
但我很惊讶为什么这本身似乎并不是一种广为人知和使用的做法,所以我想知道是否有一个方面我没有考虑?
使用装饰器模式进行异常处理是假的还是我一直都错过了它?请赐教!有哪些陷阱?
是否有一个包/模块支持以合理的方式创建此类异常处理?
【问题讨论】:
-
我正在查看答案,我只是想...如果您要将许多类似的错误处理任务一起重构为一个函数...您不只是创建了一个起点无论如何,对于装饰器中的类方法?
-
我无法关注你,抱歉。你的意思是,我应该使用装饰器方法并使用新创建的异常装饰器类重构现有代码,还是你的意思是我不需要装饰器,因为我可以使用每个类的异常处理方法?跨度>
-
我的意思是,如果您将大多数错误处理的细节抽象到一个方法中,那么您已经完成了将 那个 抽象为一个类,用作装饰器。我的想法?它可能偶尔会搞砸你的工作,但为了处理一般错误处理任务之外的事件,你总是可以,你知道的,在方法中编写内联
try:except块。 -
所以你赞成装饰器方法,只要它解决一般的异常处理,比如在放弃之前重试连接服务器几次?
-
是的。我真的很喜欢 Ethan 的回答让你的方法看起来多么清晰。很聪明。
标签: python exception-handling decorator python-2.6