【发布时间】:2016-01-17 23:31:55
【问题描述】:
我想知道您是否可以重新引发(特定)捕获的异常,并让它被以后的(一般)捕获,除非在同一个 try-except 中。例如,我想对特定的 IOError 做一些事情,但如果它不是预期的 IOError,那么应该像处理任何其他错误一样处理异常。我最初尝试的:
try:
raise IOError()
except IOError as ioerr:
if ioerr.errno == errno.ENOENT:
# do something with the expected err
else:
# continue with the try-except - should be handled like any other error
raise
except Exception as ex:
# general error handling code
但是,这不起作用:raise 会在 try-except 的上下文之外重新引发异常。 编写此代码以获得所需的异常“失败”行为的 Pythonic 方式是什么?
(我知道有一个提议的“有条件的除外”没有实现,这本可以解决这个问题)
【问题讨论】:
-
所以您希望能够从
except IOError块转到except Exception块?据我所知,这是不可能的,对于给定的try,只有一个except块(或else块)运行。您可以将整个东西包裹在另一个try中,移除内部的except Exception,这意味着除了专门处理的IOErrors 之外的所有内容最终都在外部try的excepts 中。 -
这是我想做的,我担心只有一个 except 是可能的。我希望有一个更优雅的解决方案,比如嵌套 else's/code duplication
标签: python-2.7 exception-handling try-catch