有了with
声明,是否需要打开文件/检查异常/手动关闭资源,例如
try:
f = open('myfile.txt')
for line in f:
print line
except IOError:
print 'Could not open/read file'
finally:
f.close()
有了with
声明,是否需要打开文件/检查异常/手动关闭资源,例如
try:
f = open('myfile.txt')
for line in f:
print line
except IOError:
print 'Could not open/read file'
finally:
f.close()
您当前的代码尝试处理未找到文件或访问权限不足等异常,这是with open(file) as f:
块不会完成的。
此外,在这种情况下,该finally:
块将引发 aNameError
因为f
不会被定义。
在一个块中,块内with
发生的任何异常(无论是何种类型,可能是代码中的零除)仍会引发,但即使您不处理它,您的文件也将始终正确关闭。那是完全不同的东西。
你想要的可能是:
try:
with open("myfile.txt") as f:
do_Stuff() # even if this raises an exception, f will be closed.
except IOError:
print "Couldn't open/read myfile.txt"