Python with 语句——是否还需要旧式文件处理?

标签 python exception with-statement

有了 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: block 不会这样做。

此外,在这种情况下,finally: block 会引发 NameError,因为 f 不会被定义。

with block 中, block 内 发生的任何异常(任何类型,可能是代码中被零除)仍将被引发,但即使如果您不处理它,您的文件将始终正常关闭。那是完全不同的东西。

你想要的可能是:

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"

关于Python with 语句——是否还需要旧式文件处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3996358/

相关文章:

python - 从对象列表中获取属性的最大值

python - 根据列表将列表包装成自定义字符串

python - 确定在 groupby 之后的时间范围内是否出现两种类型

python - 在 Python 上使用 Memoization 计算一个简单的 'ATM'

java - Gson.toString() 给出错误 "IllegalArgumentException: multiple JSON fields named mPaint"

python - 这是上下文管理器的有效用例吗?

java - 使用脚本引擎管理器评估 Java 字符串代码时出错

node.js - 无法使用 express 处理 node.js 域的异常

python - 相当于 dart 中的 python with 语句

perl - Perl 中有关键字 'with' 吗?