我想知道在python中是否有可能在一个除了块之外引发异常并在稍后的块中捕获它。我相信其他一些语言默认会这样做。
这就是它的样子“
try:
something
except SpecificError as ex:
if str(ex) = "some error I am expecting"
print "close softly"
else:
raise
except Exception as ex:
print "did not close softly"
raise
我希望else子句中的raise能够触发final语句。
实际上我不打印任何东西,只记录它,我想记录更多的情况,这是我不期望的错误消息。但是,这个额外的日志记录将包含在最终的日志中。
我相信一个解决方案就是创建一个函数,如果它没有在最终的except和else子句中调用的软关闭。但这似乎没必要。
答案 0 :(得分:18)
怎么样写2试试......除了像这样的块:
try:
try:
something
except SpecificError as ex:
if str(ex) == "some error I am expecting"
print "close softly"
else:
raise ex
except Exception as ex:
print "did not close softly"
raise ex
答案 1 :(得分:16)
仅调用except
块中的单个try
子句。如果您希望将异常捕获更高,那么您将需要使用嵌套的try
块。
答案 2 :(得分:1)
根据python tutorial,每个try语句只有一个catched异常。 您可以在教程中找到非常简单的示例,它还将向您展示如何正确使用错误格式。
无论如何为什么你真的需要第二个?你能提供更多详细信息吗?
答案 3 :(得分:0)
您可以使用six
软件包来完成此操作。
Six提供了用于包装Python 2和Python 3之间差异的简单实用程序。
具体来说,请参见six.reraise
:
引发异常,可能具有不同的回溯。在简单的情况下,具有活动异常的
reraise(*sys.exc_info())
(在except块中)使用最后一次追溯重新引发当前异常。可以使用exc_traceback参数指定其他回溯。请注意,由于异常引发是在reraise()
函数内完成的,因此Python会将reraise()
的调用帧附加到引发的任何回溯。