它是很好的做法...取决于蟒蛇与AS语句(Is it good practice to depend

2019-08-16 20:13发布

我很好奇,如果它被认为是安全的或好的做法... ...取决于蟒蛇与AS语句。 例如打开一个文件时:

with open("myfile","w") as myFile:
    #do something

因此,在这个例子中,我忘了明确要求myFile.close()不过,我可以假设当Python退出它被称为with...as通过调用对象的语句__exit__()方法。 它是很好的做法/安全取决于这个,否则会更好地调用file.close()

Answer 1:

这是什么情况下管理者 ,依靠他们关闭文件给你。 即使有异常上下文管理器被调用。

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

myFile = open("myfile","w")
try:
    # do something with myFile
finally:
    myFile.close()

但由于内部的块try:可能会很长,由你到的时间finally说法你已经忘记了你的设置此功能。

上下文管理者更强大依然。 因为__exit__方法被告知任何异常的,他们可以作为例外处理程序,以及(忽略异常,再多问,等)。



Answer 2:

是的, with的语句是更好的办法。 因为Python 2.5,文件对象已经配备了__enter__()__exit__()方法。 的__exit__()方法关闭的文件对象。

Python的保证,它会调用__exit__()方法,但不能保证__exit__()方法关闭资源,特别是与第三方代码。 您需要手动验证。



文章来源: Is it good practice to depend on python's with…as statement