为什么以下单元测试失败,如何让我的上下文管理器正确传递异常?我正在使用python 3。
test.py:
class test(object):
def __enter__(self):
pass
def __exit__(self, *args):
return args
test_test.py:
import test
import unittest
class TestTest(unittest.TestCase):
def test_test(self):
with self.assertRaises(OverflowError):
with test.test():
raise OverflowError()
if __name__ == '__main__':
unittest.main()
运行单元测试,我收到一个错误,抱怨没有引发OverflowError。为什么会发生这种情况,我需要做什么才能使我的上下文管理器正确传播异常?
答案 0 :(得分:1)
您的问题在这里:
def __exit__(self, ex_type, ex_val, tb):
return ex_type, ex_val, tb
__exit__
的返回值意味着您要禁止在上下文块中引发的错误。
如果发生任何溢出错误,只需将其更改为不返回任何内容或引发错误。如果返回任何truthy值,则上下文块会抑制错误。你需要返回false。一个例子如下:
def __exit__(self, ex_type, ex_val, tb):
if ex_type is OverflowError:
return False
return True
编辑 Martijn Pieters总是比我更好explanation。