关于python: __exit__的返回值__

Return value of __exit__

我明白

  • __enter____exit__用于实现上下文管理器。

  • 如果在with语句中发生异常,则将异常的类型、值和回溯传递给__exit__方法。

  • __exit__可以处理异常:

  • 返回True:异常处理得当。
  • 返回任何其他内容:with语句引发异常

我遇到了下面的__exit__方法。返回语句是否冗余?

1
2
3
def __exit__(self, type, value, traceback):
    self.close()
    return type == None

在我看来,

  • 如果没有发生异常,那么type自然就是None,所以__exit__返回真值。什么都没提。
  • 如果发生了异常,则将type设置为实际的异常类型,因此__exit__返回false。异常按原样引发。


是的,那个返回语句是多余的。只有当type不是None时,返回值才重要。

object.__exit__()文件中:

If an exception is supplied, and the method wishes to suppress the exception (i.e., prevent it from being propagated), it should return a true value. Otherwise, the exception will be processed normally upon exit from this method.

请注意,一个真实的值将抑制例外;因此,1"Handled!"也会起作用,而不仅仅是True

删除该return行将导致返回None,并且功能将保持不变。但是,可读性会得到提高,因为return type == None语句只是在多个级别上混淆(例如,为什么不使用type is None语句?).