只有f5调试时args才生效,右键“run python file”或code runner插件完全无视它;args必须为字符串数组如["--input", "data.txt"],参数解析逻辑须置于if name == "__main__":块内,否则加载阶段即报错。

只有 F5 调试时 args 才生效,右键“Run Python File”或 Code Runner 插件完全无视它——这是最常配错的地方。
launch.json 里 args 必须是字符串数组
常见错误是写成一个拼接字符串:"--input data.txt"。这会让 Python 启动器报 ModuleNotFoundError 或直接退出。
- 正确写法:每个参数单独一项,空格不合并 ——
"args": ["--verbose", "--input", "data.txt", "-o", "output.json"] - 含空格的值(如人名)直接用双引号包裹:
"--name", "Alice Smith"→sys.argv收到的就是['main.py', '--name', 'Alice Smith'] - 参数本身要带引号(比如 JSON 字符串),得双重转义:
"--config", "{\"port\":8080}" -
program字段只能是纯路径:"program": "main.py"✅,"program": "main.py --input data.txt"❌
F5 调试才读 args,其他运行方式全无效
VSCode 的“运行”和“调试”走两套机制:
- 按
F5或从 “Run and Debug” 面板选择配置 → 读args,进调试器,断点生效 - 右键 → “Run Python File in Terminal” → 执行
python main.py,不读args,也不进调试流程 - Code Runner 插件默认仍走
python main.py,除非你手动改它的code-runner.executorMap配置 - 想让 “Debug Python File” 按钮也带参,必须加
"purpose": ["debug-in-terminal"],且配置名得是Python: Current File (Integrated Terminal)
参数解析代码必须放在 if __name__ == "__main__": 块里
断点没命中、脚本一加载就报错,大概率是因为参数解析逻辑没做隔离。
- 如果
main.py顶层就调了parse_args()或直接访问sys.argv[1],调试器加载模块时就会立刻失败 —— 此时args还没传进去 - 所有依赖参数的操作(读文件、连数据库、初始化配置)必须严格放在
if __name__ == "__main__":块内,或其调用的函数内部 - 调试时可在入口处加
print(sys.argv)确认是否收到预期值,避免白忙活 -
cwd字段影响相对路径解析,建议显式设为项目根目录,否则--input data.txt可能找不到文件
每次 F5 前务必盯一眼左下角的调试配置名称
args 不是全局开关,它只控制当前调试会话;换一个 launch.json 配置、换一个文件、甚至只是没选对下拉菜单里的配置项,参数就彻底失效。
最容易被忽略的一点:VSCode 不会自动记住你上次选的是哪个配置,F5 总是走当前激活的配置 —— 如果左下角显示的是 Python: Module 而不是你刚改的 Python: Current File,那 args 就不会起作用。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











