1

有了with声明,是否需要打开文件/检查异常/手动关闭资源,例如

try:
  f = open('myfile.txt')

  for line in f:
    print line
except IOError:
  print 'Could not open/read file'
finally:
  f.close()
4

1 回答 1

5

您当前的代码尝试处理未找到文件或访问权限不足等异常,这是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"
于 2010-10-22T11:35:39.720 回答