在Python函数中读取文件后如何正确关闭文件?
你的现有代码已经正确处理了文件关闭逻辑
你用到的with上下文管理器是Python官方推荐的文件操作最佳实践,它会自动帮你处理文件关闭的动作,完全不需要手动调用close()方法。
原理说明
with代码块的执行逻辑是:
- 进入代码块时自动执行
open()逻辑,返回文件对象赋值给file变量 - 不管代码块是正常执行结束,还是中途抛出异常,甚至是碰到
return提前跳出,退出with代码块时都会自动执行file.close()释放文件资源
你现在的写法里,with代码块在return之前就已经完成了退出动作,文件早就被安全关闭了,函数返回的只是你已经提取好的单词列表,不存在资源泄露的问题。
不用with的传统写法(仅作参考,更推荐你现在的写法)
如果你不用上下文管理器,就需要手动加try...finally保证哪怕执行出错也能关闭文件,写法更繁琐:
import re def read_file(filename): # 手动打开文件 file = open(filename, "r", encoding="utf-8") try: lines = file.readlines() words = [] for line in lines: words += re.findall(r'\w+', line.lower()) return words finally: # 必须手动写关闭逻辑,否则一旦读取过程出错就会导致文件一直被占用 file.close()
函数场景的注意点
不管你用哪种写法,只要保证文件打开的逻辑和关闭的逻辑配对即可:
- 用
with的写法不需要操心配对问题,上下文管理器自动处理 - 手动打开的情况,一定要保证不管函数走哪个分支退出,都能执行到
close()方法
你的现有代码完全符合规范,不需要做任何修改。
内容的提问来源于stack exchange,提问作者Smartie
相关产品推荐
相关产品推荐

