[英]python context manager not passing exceptions
為什么以下單元測試失敗,如何使上下文管理器正確傳遞異常? 我正在使用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。 為什么會發生這種情況,我該怎么做才能使上下文管理器正確傳播異常?
您的問題在這里:
def __exit__(self, ex_type, ex_val, tb):
return ex_type, ex_val, tb
__exit__
的返回值表示您希望抑制上下文塊內引發的那些錯誤。
只需將其更改為不返回任何內容,或者在發生任何溢出錯誤時引發錯誤。 如果返回任何真實值,則上下文塊將抑制該錯誤。 您需要返回false。 示例如下:
def __exit__(self, ex_type, ex_val, tb):
if ex_type is OverflowError:
return False
return True
一如既往地編輯 Martijn Pieters比我有更好的解釋 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.