gpt4 book ai didi

python - 在python中打开和关闭文件

转载 作者:太空狗 更新时间:2023-10-29 20:38:06 25 4
gpt4 key购买 nike

我读过当使用以下格式打开文件时

with open(filename) as f:
#My Code
f.close()

不需要明确关闭文件。有人可以解释为什么会这样吗?另外,如果有人明确关闭文件,是否会产生不良影响?

最佳答案

最重要的概述是这样的:当您离开嵌套 block 时,Python 会自动为您调用 f.close()

不管是直接从底部掉下去,还是调用break/continue/return跳出它,或引发异常;无论你如何离开那个街区。它总是知道您要离开,所以它总是关闭文件。*


向下一层,您可以将其视为映射到 try:/finally: 语句:

f = open(filename)
try:
# My Code
finally:
f.close()

再往下一层:它怎么知道调用 close 而不是调用其他东西?

嗯,事实并非如此。它实际上调用了特殊方法 __enter____exit__:

f = open()
f.__enter__()
try:
# My Code
finally:
f.__exit__()

open 返回的对象(Python 2 中的 file,Python 3 中 io 的包装器之一)有类似里面有这个:

def __exit__(self):
self.close()

它实际上比上一个版本更复杂一些,这使得生成更好的错误消息变得更容易,并且让 Python 避免“进入”一个它不知道如何“退出”的 block 。

要了解所有详细信息,请阅读 PEP 343 .


Also if someone does explicitly close the file, will it have any undesirable effect ?

一般来说,这是一件坏事。

但是,文件对象竭尽全力确保其安全。对已关闭的文件执行任何操作都是错误的——除非再次关闭它。


* 除非你离开,比如说,在服务器执行脚本的过程中拔下服务器的电源线。在那种情况下,显然,它永远不会运行任何 代码,更不用说关闭 了。但是显式的 close 几乎帮不了你。

关于python - 在python中打开和关闭文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17459867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com