我很好奇,如果它被认为是安全的或好的做法... ...取决于蟒蛇与AS语句。 例如打开一个文件时:
with open("myfile","w") as myFile:
#do something
因此,在这个例子中,我忘了明确要求myFile.close()
不过,我可以假设当Python退出它被称为with...as
通过调用对象的语句__exit__()
方法。 它是很好的做法/安全取决于这个,否则会更好地调用file.close()
我很好奇,如果它被认为是安全的或好的做法... ...取决于蟒蛇与AS语句。 例如打开一个文件时:
with open("myfile","w") as myFile:
#do something
因此,在这个例子中,我忘了明确要求myFile.close()
不过,我可以假设当Python退出它被称为with...as
通过调用对象的语句__exit__()
方法。 它是很好的做法/安全取决于这个,否则会更好地调用file.close()
这是什么情况下管理者是 ,依靠他们关闭文件给你。 即使有异常上下文管理器被调用。
另一种方法是使用一个finally
块代替:
myFile = open("myfile","w")
try:
# do something with myFile
finally:
myFile.close()
但由于内部的块try:
可能会很长,由你到的时间finally
说法你已经忘记了你的设置此功能。
上下文管理者更强大依然。 因为__exit__
方法被告知任何异常的,他们可以作为例外处理程序,以及(忽略异常,再多问,等)。
是的, with
的语句是更好的办法。 因为Python 2.5,文件对象已经配备了__enter__()
和__exit__()
方法。 的__exit__()
方法关闭的文件对象。
Python的保证,它会调用__exit__()
方法,但不能保证__exit__()
方法关闭资源,特别是与第三方代码。 您需要手动验证。