__exit__吞咽TypeError

时间:2017-12-22 04:31:56

标签: python python-3.x error-handling

我在提醒自己关键词'''''我偶然发现了这篇文章http://effbot.org/zone/python-with-statement.htm。我只是有一个很小的,很明显的问题。文章指出,这可以吞下任何类型错误''

{{1}}

我不太清楚这是怎么回事?我们将非常感谢您的快速解释?

1 个答案:

答案 0 :(得分:3)

如果从True子句返回__exit__,它将阻止任何错误通过。例如:

class Foo():
    def __enter__(self):
        print("enter")
    def __exit__(self, type, value, tb):
        print("exit with", repr(value))
        return True

with Foo():
    print("inside")
    raise ValueError()

将输出

enter
inside
exit with ValueError()

但由于__exit__()返回True而未提出任何内容。

在示例中,如果引发的错误是TypeError,则声明为:

return isinstance(value, TypeError)

将返回TrueTypeError将被吞并"。