2010-10-22 48 views
1

利用具有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() 
+2

没有..................... – SilentGhost 2010-10-22 11:33:43

+2

能否请你告诉你如何使用'与'声明做同样的事情? – 2010-10-22 11:34:11

+0

with open(“myfile.txt”)as f: data = f.read() 对数据做些什么 – jknair 2010-10-22 11:37:56

回答

5

您当前的代码试图处理文件外不是发现或访问权限不足等,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" 
+0

分裂头发:如果在打开文件时抛出IOError,而不是在f中的for循环中,finally会引发NameError,因为f将由该点定义。一个小的更正,因为大多数IOErrors可能会在文件打开时发生。 – Bluu 2011-03-04 18:34:17

相关问题