sys.exc_info()方法的行为在Python文档和SO以及SO中描述如下:
- 在except块或由except块调用的方法内,返回一个描述异常的三元组;
- 在其他地方,返回三个None值的三元组。
那么为什么这个nosetest会失败呢?
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?
最后一行出错了。如果取消finally块的注释,则会在那里出错。
我发现,如果我将所有这些内容放在一个方法内,并从另一个方法调用,则调用方法看不到异常。即使在处理异常之后,exc_info值似乎仍然设置为抛出异常的方法的结尾。
我正在使用Mac OSX上的python2.7。