PyCharm 中需勾选“Run with Python console”并点击“Show variables”才能在程序运行后查看顶层变量;局部变量无法保留,Variables 面板默认不显示导入模块、隐藏变量及动态创建变量。

运行后保留变量并打开 Python Console
PyCharm 默认 Run 模式执行完就退出,所有局部变量随作用域销毁,根本看不到。想在程序跑完后继续查 data、df、model 这类变量,必须让解释器不退出,而是进入交互式 Python Console —— 这才是关键前提。
操作路径固定:点击右上角绿色三角形旁边的下拉箭头 → Edit Configurations… → 左侧选中你的运行配置(如 main.py)→ 勾选 Run with Python console(PyCharm 2021.3+ 版本名称,旧版叫 Show command line afterwards)→ 点击 OK。
注意:Run with Python console 不等于 Debug;它只是让程序结束后自动挂起一个 IPython 会话,所有顶层作用域的变量(包括函数外定义的、模块级赋值的)都会保留在 console 中可访问。
- 如果勾选后运行报错
Couldn't connect to console process,大概率是 Windows 防火墙拦截了 PyCharm 的本地 socket 通信,临时关闭防火墙或添加例外即可 - 该设置只对当前配置生效;若想所有新脚本默认启用,需在
Edit Configurations…页面点左下角Templates→Python→ 勾选同项,再点Apply - 函数内部定义的纯局部变量(如
def f(): x = 1中的x)仍不可见——它生命周期只在函数调用内,运行结束即销毁,无法保留
启用 Variables 面板实时显示变量列表
光有 Console 不够直观;真正对标 MATLAB 工作区的是右侧的 Variables 面板。但它默认不自动弹出,需要手动触发。
运行程序后,底部工具栏会出现一个类似眼镜图标的按钮(图标名就是 Show variables),点击它即可展开右侧变量视图。面板里显示的是当前 console 作用域下的所有变量名、类型、简要值(如 list 显示长度,numpy.ndarray 显示 shape 和 dtype)。
PyCharm 2026.2是 JetBrains PyCharm 的指定版本安装包,下载地址指向官方 Windows 安装包直链,可用于旧项目兼容、版本回退和环境测试。
- 变量名点击可展开查看具体内容(比如
dict点开看 key,pd.DataFrame点开看前几行) - 双击值字段可直接编辑(仅限支持原地修改的类型,如数字、字符串;
list可改元素,但不能增删) - 面板刷新不是实时的——只有你手动在 console 输入新变量、或重新运行脚本后才会更新
为什么 debug 查不到运行后的变量?
Debug 模式(虫子图标)和 Run 模式本质不同:Debug 是逐帧暂停、堆栈隔离的调试会话,变量只存在于当前断点所在栈帧;一旦程序正常结束,整个调试会话销毁,变量全丢。所以 debug 看的是“暂停时的快照”,不是“运行完的产物”。
如果你的目标是验证最终输出、临时补充分析(比如跑完训练想立刻 plt.plot(loss_history)),就必须用 Run with Python console + Show variables 组合。Debug 适合定位某一行逻辑错误,而不是做 post-run 探索。
- 别试图在 Debug 中靠“Step Over”走到最后一行再看变量——函数返回后局部变量已释放,
Variables面板里只剩全局/模块级变量 - 若脚本含
sys.exit()或异常未捕获,console 会提前中断,变量无法保留;确保主流程自然结束
常见变量不可见的三个原因
即使设置了 Run with Python console 并点了 Show variables,仍可能看不到想要的变量。核心问题通常出在作用域或命名上:
-
import语句本身不产生变量名,但from module import x会把x注入当前命名空间;而import module后必须用module.x访问,Variables面板只列顶层符号,不会展开模块对象 - 变量名以
_开头(如_temp)默认被Variables面板过滤,需右键面板空白处 →Show Hidden Variables - 使用
exec()、eval()动态创建的变量不会出现在面板中,因为它们没经过常规赋值语法解析,console 里能用,但面板不识别
真正要长期复用分析流程,不如把关键中间结果显式存成文件(如 np.save('feat.npy', features))或写入全局 dict,比依赖 IDE 的变量保留更可控。

















