args仅在F5或“Run and Debug”面板启动调试时生效,右键运行、Code Runner及默认“Debug Python File”按钮均不读取;必须确保args为合法字符串数组、参数解析代码置于if name == "__main__":内、program为纯路径、cwd明确指定。

必须通过 launch.json 配置 args 字段,且仅在 F5 启动调试时生效;右键“Run Python File”、Code Runner 插件、或“Debug Python File”按钮默认都不读这个字段。
为什么 args 总是不生效
最常见的误操作是混淆了“运行”和“调试”两条路径:VS Code 的右键菜单和插件走的是 shell 执行逻辑(python main.py),而 args 是调试器启动阶段才注入的参数,只对 DAP 协议下的调试会话起作用。
- 点 F5 或从“Run and Debug”面板选择配置 → 读
args,进debugpy,断点可用 - 右键 → “Run Python File in Terminal” → 执行
python main.py,忽略args - “Debug Python File”按钮默认对应一个独立的快捷配置,除非你显式把它改造成
purpose: ["debug-in-terminal"]并命名为Python: Current File (Integrated Terminal),否则也不读args
args 字段怎么写才合法
args 必须是字符串数组,每个参数单独一项,不能拼接、不能漏引号、不能带空格合并。
- ✅ 正确:
"args": ["--verbose", "--input", "data.txt", "-o", "output.json"] - ❌ 错误:
"args": ["--verbose --input data.txt"](会被当做一个参数传给 Python 解释器,导致sys.argv解析失败) - 含空格的值直接用双引号包裹:
"--name", "Alice Smith"→sys.argv收到的就是['main.py', '--name', 'Alice Smith'] - 参数本身要带引号(如 JSON 字符串)需双重转义:
"--config", "{\"port\":8080}"
参数解析代码放错位置导致一加载就报错
如果 main.py 顶层就调用 argparse.ArgumentParser().parse_args() 或直接访问 sys.argv[1],调试器在导入模块阶段就会崩溃——此时 args 还没传进去。
- 所有依赖命令行参数的操作(读文件、连数据库、初始化配置)必须严格放在
if __name__ == "__main__":块内,或其调用的函数中 - 调试前建议加一句
print(sys.argv)确认是否收到预期参数 -
program字段只能是纯路径:"program": "main.py"✅,"program": "main.py --input data.txt"❌
容易被忽略的 cwd 和配置切换问题
cwd 决定相对路径如何解析,比如 --input data.txt 会相对于 cwd 查找。VS Code 不会自动设为项目根目录,不显式配置就可能找不到文件。
- 务必加上
"cwd": "${workspaceFolder}",避免路径歧义 - F5 总是触发当前选中的调试配置,左下角状态栏显示的名称就是实际生效的配置;换一个文件、换一个下拉菜单选项、甚至只是没点对,
args就完全失效 - VS Code 不记住上次选的配置,每次调试前都得确认一遍下拉菜单里选的是哪个











