PyCharm调试时文件读取异常,导入json模块后问题复现
PyCharm调试时导入json模块导致文件读取内容为空的问题
问题复现
代码如下:
import json import os if os.path.exists('asdf.txt'): with open('asdf.txt', 'r', encoding='utf-8') as f: print(f.read())
asdf.txt内容为test:
- 正常运行时控制台输出
test; - 在PyCharm 2023.2.1(专业版)中,给
print(f.read())行设置断点调试,控制台打印空行,调试器中文件对象f的内容显示为''; - 禁用调试的Cython加速无效;
- 若在
print后加pass并在pass行断点(不打断print执行),则能正常输出内容; - 不导入
json模块时,调试断点一切正常。
原因分析
这个问题是PyCharm 2023.2.1版本调试器与json模块的交互bug:json模块导入时会初始化内部的编码/解码逻辑,间接修改了Python内置IO对象的行为或属性。当调试器在print行暂停时,会尝试读取文件对象f的属性来展示给用户,这个过程提前消耗了文件的读取指针——文件内容被调试器提前读取,导致后续print(f.read())执行时,文件指针已经到了末尾,只能读取到空字符串。
解决办法
- 临时绕过方案:先把文件内容读取到变量中再打印,即使调试器提前访问文件对象,变量里已保存内容,断点时能正常查看,执行
print也不会为空:
import json import os if os.path.exists('asdf.txt'): with open('asdf.txt', 'r', encoding='utf-8') as f: content = f.read() print(content) # 此处断点,content仍保留文件内容
升级PyCharm版本:JetBrains通常会在后续版本修复这类调试器相关bug,尝试升级到2023.2.2及以上版本,看问题是否消失。
调整调试器设置:在PyCharm的
Settings > Build, Execution, Deployment > Python Debugger中,尝试关闭一些调试器增强特性,比如禁用Collect run-time types information,或切换到旧版调试器后端,可能缓解冲突。
内容的提问来源于stack exchange,提问作者Edel Gerardo
相关产品推荐
相关产品推荐

