【发布时间】:2013-03-11 16:46:59
【问题描述】:
从自定义游标类的__exit__ 块中,我想捕获一个异常,这样我就可以反过来抛出一个更具体的异常。这样做的正确方法是什么?
class Cursor:
def __enter__(self):
...
def __exit__(self, ex_type, ex_val, tb):
if ex_type == VagueThirdPartyError:
# get new more specific error based on error code in ex_val and
# return that one in its place.
return False # ?
else:
return False
在 __exit__ 块中提出特定异常似乎是一种 hack,但也许我想多了。
【问题讨论】:
-
为什么只提出异常看起来像是一种黑客行为?
-
我认为可能有另一种方法可以做到这一点,因为上下文管理器会捕获主块中的任何异常,将其存储,然后将其传递给 exit 以进行批准或否决。在exit内加注似乎更像是根据其论点扩大其职责-但我显然想多了。
标签: python exception-handling with-statement