VS Code选中代码按Shift+Enter运行报NameError的原因及解决方法
问题出现原因
VS Code中Shift+Enter运行选中代码的默认逻辑,是将选中内容提交给新启动的Python解释器进程执行,执行完成后进程会直接销毁,内存中存储的所有变量、导入的包都会被清空。
你整体运行脚本时,三行代码在同一个Python进程中按顺序执行,x变量提前完成了赋值,所以运行正常;单独选中print(x)运行时,新启动的Python进程没有执行过import numpy as np和x = np.arange(5)两行代码,自然找不到x的定义,抛出NameError。
解决方法
- 选中全量依赖代码运行:如果要运行某段代码,选中包含所有前置依赖的完整代码块再按
Shift+Enter,比如要运行print(x)就同时选中前三行代码,保证所有依赖的变量都在当前进程中完成赋值。 - 启用持久化交互终端:先在VS Code的终端中启动Python交互环境(输入
python或python3调出>>>提示符),之后按Shift+Enter运行选中代码时,内容会提交到这个持续运行的交互进程中执行,只要你提前运行过前两行赋值代码,后续单独运行print(x)就不会报错。 - 使用Jupyter单元格拆分模式:安装VS Code的Jupyter扩展后,在
.py文件中用# %%标记拆分代码单元格:
# %% 第一个单元格:初始化变量 import numpy as np x = np.arange(5) # %% 第二个单元格:打印输出 print(x)
每个单元格可以单独按Shift+Enter运行,所有单元格共享同一个Jupyter内核进程,之前运行生成的变量会一直保留,不需要重复执行前置代码。
内容的提问来源于stack exchange,提问作者Python
相关产品推荐
相关产品推荐

