You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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())执行时,文件指针已经到了末尾,只能读取到空字符串。

解决办法

  1. 临时绕过方案:先把文件内容读取到变量中再打印,即使调试器提前访问文件对象,变量里已保存内容,断点时能正常查看,执行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仍保留文件内容
  1. 升级PyCharm版本:JetBrains通常会在后续版本修复这类调试器相关bug,尝试升级到2023.2.2及以上版本,看问题是否消失。

  2. 调整调试器设置:在PyCharm的Settings > Build, Execution, Deployment > Python Debugger中,尝试关闭一些调试器增强特性,比如禁用Collect run-time types information,或切换到旧版调试器后端,可能缓解冲突。

内容的提问来源于stack exchange,提问作者Edel Gerardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:12:17