以...作为声明依赖python是一种好习惯

Bla*_*ine 13 python with-statement contextmanager

我很好奇是否认为安全或良好的做法依赖于python的...作为声明.例如,打开文件时:

with open("myfile","w") as myFile:
    #do something
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中我忽略了显式调用myFile.close()但是我可以假设当python with...as通过调用objects __exit__()方法退出语句时调用它.依赖于此是好的做法/安全还是总是明确地打电话会更好file.close()

Mar*_*ers 20

这是什么情况下管理者,要靠他们关闭文件给你.即使存在异常,也会调用上下文管理器.

另一种方法是使用finally块代替:

myFile = open("myfile","w")
try:
    # do something with myFile
finally:
    myFile.close()
Run Code Online (Sandbox Code Playgroud)

但是因为内部的阻塞try:可能很长,所以当你接到finally声明时,你已经忘记了你为此设置的内容.

上下文管理器仍然更强大.因为该__exit__方法被告知任何异常,所以它们也可以充当异常处理程序(忽略异常,引发异常等).