利用具有with
说法,是有过需要打开一个文件/检查异常/ DO资源的手动关闭,就像在带声明的Python - 是否需要更旧的文件处理?
try:
f = open('myfile.txt')
for line in f:
print line
except IOError:
print 'Could not open/read file'
finally:
f.close()
利用具有with
说法,是有过需要打开一个文件/检查异常/ DO资源的手动关闭,就像在带声明的Python - 是否需要更旧的文件处理?
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:
块将产生NameError
,因为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"
分裂头发:如果在打开文件时抛出IOError,而不是在f中的for循环中,finally会引发NameError,因为f将由该点定义。一个小的更正,因为大多数IOErrors可能会在文件打开时发生。 – Bluu 2011-03-04 18:34:17
没有..................... – SilentGhost 2010-10-22 11:33:43
能否请你告诉你如何使用'与'声明做同样的事情? – 2010-10-22 11:34:11
with open(“myfile.txt”)as f: data = f.read() 对数据做些什么 – jknair 2010-10-22 11:37:56