sam*_*sam 14 python with-statement contextmanager
我明白那个
__enter__并__exit__用于实现上下文管理器.
如果with语句中发生异常,则将异常的类型,值和回溯传递给该__exit__方法.
__exit__ 可以处理异常:
True:正常处理异常.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 确实的返回值问题.
如果提供了异常,并且该方法希望抑制异常(即,防止它被传播),则它应该返回一个真值.否则,在退出此方法时将正常处理异常.
请注意,true值将抑制异常; 所以1或者"Handled!"也会工作,而不仅仅是True.
删除该return行将导致None返回,并且功能将保持不变.然而,可读性会得到改善,因为该return type == None语句只会在多个级别上混淆(type is None例如,为什么不使用?).