簡體   English   中英

python上下文管理器未傳遞異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM