__exit__的返回值

sam*_*sam 14 python with-statement contextmanager

我明白那个

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

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

  • __exit__ 可以处理异常:

    1. 返回True:正常处理异常.
    2. 返回任何其他内容:该with语句引发异常

我遇到了以下__exit__方法.return语句是多余的吗?

def __exit__(self, type, value, traceback):
    self.close()
    return type == None
Run Code Online (Sandbox Code Playgroud)

因为在我看来,

  • 如果没有发生异常,type自然会None,所以__exit__返回true.什么都没有提出来.
  • 如果确实发生了异常,type则将其设置为实际的异常类型,因此__exit__返回false.异常是按原样引发的.

Mar*_*ers 15

是的,该退货声明是多余的.只有当type None 确实的返回值问题.

object.__exit__()文档:

如果提供了异常,并且该方法希望抑制异常(即,防止它被传播),则它应该返回一个真值.否则,在退出此方法时将正常处理异常.

请注意,true值将抑制异常; 所以1或者"Handled!"也会工作,而不仅仅是True.

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