vscode 的 args 字段仅在 f5 启动调试(request: "launch")时生效,右键运行、绿色虫子图标或 ctrl+f5 均忽略;必须为字符串数组,如 ["--input", "data.txt"];参数解析须在 if name == "__main__": 内;“debug python file”需配置名严格为 "python: current file (integrated terminal)" 并设 "purpose": ["debug-in-terminal"] 和 "console": "integratedterminal";attach 模式下 args 完全无效。

VSCode 的 args 字段只在 F5 启动调试(request: "launch")时生效,右键“Run Python File”、点击顶部绿色虫子图标、或 Ctrl+F5 运行,全部忽略它。
launch.json 里怎么写 args 才不报错
必须是字符串数组,每个参数单独一项,JSON 语法要合法:
-
"args": ["--input", "data.txt", "--verbose"]✅ 正确:三个独立字符串 -
"args": ["--input data.txt"]❌ 错误:会被当做一个参数,Python 收到的是sys.argv[1] == "--input data.txt" -
"args": ["--name", "Alice Smith"]✅ 含空格的值不用额外引号,JSON 字符串本身已包裹 -
"args": ["--config", "{\"port\":8080}"]✅ JSON 内容需双重转义(外层 JSON + 内层字符串)
断点不生效?大概率是参数没等到就执行了
VSCode 加载脚本时会先执行所有顶层代码(import 之后、if __name__ == "__main__": 之外),此时 sys.argv 还是默认值(只有脚本名)。如果你在顶层就调用 open(sys.argv[1]) 或 parser.parse_args(),就会报 IndexError 或 FileNotFoundError。
- 所有参数解析逻辑(
argparse.ArgumentParser().parse_args())必须放在if __name__ == "__main__":块内 - 避免在模块顶层读文件、连数据库、初始化配置等依赖参数的操作
- 调试时可在
parse_args()后加一句print(args),确认是否真收到了预期值
想让“Debug Python File”按钮也带参,得改两处
VSCode 默认的绿色虫子按钮走的是内部调试器路径,不读 args。要让它生效,必须同时满足:
- 配置名必须严格为
"Python: Current File (Integrated Terminal)"(大小写、括号、空格一个都不能错) - 加上
"purpose": ["debug-in-terminal"] - 加上
"console": "integratedTerminal"
否则即使点了按钮,也会 fallback 到无参的内部调试器。
attach 模式下 args 字段完全无效
如果你用的是 request: "attach"(比如 python -m debugpy --listen 5678 ./script.py arg1 arg2),那么 launch.json 里的 args 字段纯粹是摆设——它不会被传给目标进程,也不会被合并或覆盖。
- 参数必须显式写在终端命令里:
python -m debugpy --listen 5678 ./test.py parameter1 parameter2 - 逗号分隔是常见错误:
./test.py"parameter1","parameter2"会被当做一个字符串参数 - 推荐加
--wait-for-client,避免 VS Code 还没连上,脚本就跑完了
最易被忽略的一点:args 生效与否,和你按哪个按钮、走哪条启动路径强绑定,而不是和配置文件里有没有这个字段有关。











