小编use*_*943的帖子

sys.exc_info() 如何工作?

sys.exc_info() 的行为在python 文档SOSO 中描述为:

  • 在一个 except 块或由一个 except 块调用的方法中,描述异常的三元组
  • 在其他地方,三重 None 值

那么为什么这个鼻子测试会失败呢?

def test_lang_stack(self):
    try:
        self.assertEquals((None,None,None), sys.exc_info()) # no exception
        a = 5 / 0
    except:
        self.assertNotEquals((None,None,None), sys.exc_info())  # got exception
    else:
        self.fail('should not get here')
    #finally:
    #    self.assertEquals((None,None,None), sys.exc_info()) # already handled, right?
    self.assertEquals((None,None,None), sys.exc_info())  # already handled, right?
Run Code Online (Sandbox Code Playgroud)

它在最后一行失败。如果你取消对 finally 块的注释,它会在那里失败。

我确实看到,如果我将所有这些放在一个方法中并从另一个方法调用,那么调用方法不会看到异常。exc_info 值似乎仍然设置为抛出异常的方法的末尾,即使在处理异常之后也是如此。

我在 OSX 上使用 python2.7。

python exception python-2.7

5
推荐指数
2
解决办法
5975
查看次数

标签 统计

exception ×1

python ×1

python-2.7 ×1