Python中文件打开未关闭便调用文件或未关闭文件便多次以写的方式打开文件导致异常
复现
利用python代码解析字符串,生成一个临时python文件,并执行该文件。
发现临时python文件中的部分code没有被执行,或由临时python文件输出的结果错误
例如以下场景:
1)使用python解析伪代码,并生成tmp_python.py
临时python文件,在没有close()
掉tmp_python.py
临时python文件,便通过python3 tmp_python.py
执行,此时并不会产生任何结果。
2)使用python以a
或w
方式打开文件,没有close()
,再次以a
或w
方式打开文件,导致写入的新数据异常
原因
-
在os.system()、subprocess.Popen()前,没有将文件对象close()
-
close()
相当于执行 “保存并退出” -
多次打开文件并没有
close()
,此时文件指针机会产生混乱,从而导致数据开始写的位置异常
解决
-
执行文件前,必须
close()
文件,如果后续还需要再次写文件,重新打开文件生成文件对象 -
当出现第二次以
a
或w
方式打开文件时,先将原来的文件对象close()
博客内容仅供参考,部分参考他人优秀博文,仅供学习使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2018-12-24 Django框架(三十)—— 使用Vue搭建前台
2018-12-24 Django框架(二十九)—— 跨域问题
2018-12-24 Django框架(二十八)—— Django缓存机制
2018-12-24 Django框架(二十七)—— ContentType组件