Python __退出\吞咽类型错误

Python __退出\吞咽类型错误,python,python-3.x,error-handling,Python,Python 3.x,Error Handling,我在提醒自己关于“关键字”的事情,我偶然发现了这篇文章。我只是有一个很小的,很明显的问题。这篇文章说这“包含任何打字错误” 我不太明白是怎么回事?如果您从\uuuu exit\uuuu子句返回True,它将阻止任何错误的发生。例如: class Foo(): def __enter__(self): print("enter") def __exit__(self, type, value, tb): print("exit with", repr

我在提醒自己关于“关键字”的事情,我偶然发现了这篇文章。我只是有一个很小的,很明显的问题。这篇文章说这“包含任何打字错误”


我不太明白是怎么回事?如果您从
\uuuu exit\uuuu
子句返回
True
,它将阻止任何错误的发生。例如:

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()
但不会引发任何问题,因为
\uuu exit\uu()
返回了
True

在本例中,如果引发的错误是
TypeError
,则语句:

return isinstance(value, TypeError)
将返回
True
,并且
TypeError
将被“吞没”。

return isinstance(value, TypeError)