python - 为什么 `with open()` 更适合在 Python 中打开文件?

标签 python file io

经常当有人发布他们的代码时,人们会在旁边加上一句“你现在应该使用 with open('filename') as f 语法。”我同意大多数老式的 f = open() 语句没有伴随的 .close(),我什至回答了这种依赖于“隐式关闭”是他们编程问题的全部原因。

但是,在某些情况下,将代码嵌套在 with block 中似乎会给编写代码带来其他不便。例如,有时我喜欢在开头使用标志来表示 writefile = True。这让我只能打开和关闭要使用的文件,同时保持相同的处理线程。在代码的不同位置,我可以打印到屏幕或写入文件。 (我意识到我会打开 stdout 或开头的文件并改用该方法。)

我的问题是:除了不必显式关闭文件外,还有其他原因可以使用with 语法来处理文件,尤其是输出文件吗? (“更多 pythonic”本身并不是理由。)如果这是重复的,我很乐意指出这一点,但我自己找不到。

最佳答案

with 没有其他优势:确保清理是它的唯一目的。

无论如何,您都需要一个作用域 block ,以便在发生异常时关闭文件:

writefile = random.choice([True, False])
f = open(filename) if writefile else None
try:
    # some code or other
finally:
    if writefile:
        f.close()

因此,无论您如何编写,您描述为 with 的缺点实际上是正确代码的缺点(在需要清理的情况下)。

关于python - 为什么 `with open()` 更适合在 Python 中打开文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711344/

相关文章:

python - boost python编译模块中缺少库

c++ - : Expected constructor,析构函数错误,或者 '.' token之前的类型转换 - 理解fstream

c++ - C++中的二进制文件

java - 在一个过程中多次保存 printWriter 的更新版本

c - 文件 I/O 困惑

python - 获取某个字段是否为NULL

python - 否定前瞻断言在 python 中不起作用

python - Pandas:对一些数据进行分组

java - 创建文件的最简单方法是什么?

python-3.x - Python3的开放缓冲参数看起来很奇怪