【发布时间】:2017-05-12 21:02:17
【问题描述】:
我明白了
__enter__和__exit__用于实现上下文管理器。如果
with语句中发生异常,则将异常的类型、值和回溯传递给__exit__方法。-
__exit__可以处理异常:- 返回
True:异常处理得当。 - 返回任何其他内容:
with语句引发异常
- 返回
我遇到了以下__exit__ 方法。 return 语句是多余的吗?
def __exit__(self, type, value, traceback):
self.close()
return type == None
因为在我看来,
- 如果没有发生异常,
type自然会是None,所以__exit__返回true。没有提出任何问题。 - 如果确实发生了异常,
type将设置为实际的异常类型,因此__exit__返回 false。按原样引发异常。
【问题讨论】:
-
这在不止一个层面上是一个令人困惑的
return声明。当您可以使用is None时,切勿使用== None。但是,是的,只要完全删除return行就可以了。 -
当你将方法参数命名为
type时也会让人困惑。因为type已经是内置关键字。最好使用exc_type,因为它不会混淆并且不会影响内置关键字。
标签: python with-statement contextmanager