Python重新加载/重新获取异常

时间:2011-06-09 21:51:36

标签: python exception raise

我想知道在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子句中调用的软关闭。但这似乎没必要。

4 个答案:

答案 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()的调用帧附加到引发的任何回溯。