调试时参数不生效是因为未配置launch.json,VSCode仅在F5调试时读取其中的args字符串数组(如["--input","data.txt"]),右键运行或Code Runner均无效;参数须置于if name == "__main__":块内解析,且program必须为纯路径。

调试时参数不生效,是因为没配 launch.json
VSCode 默认不会把命令行参数传给 Python 脚本,必须显式配置。直接在终端里用 python script.py --input data.txt 能跑,但点「开始调试」就报错或参数为空——这说明调试器根本没收到参数。
解决办法是生成或编辑项目根目录下的 .vscode/launch.json,并在 configurations 里添加 args 字段:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File with Args",
"type": "python",
"request": "launch",
"module": "python",
"args": ["--input", "data.txt", "--verbose"],
"justMyCode": true
}
]
}
-
args是字符串数组,每个参数单独一项;空格、等号、引号都按原样传入,不需要额外转义 - 如果脚本依赖相对路径(比如读取
./config.yaml),注意cwd字段默认是工作区根目录,可显式设为"cwd": "${fileDirname}"来对齐文件所在目录 - 多个配置可以共存,比如一个带参数、一个不带,通过左下角「运行和调试」面板切换
args 里的路径写相对还是绝对?
VSCode 在调试时解析 args 中的路径,是以 cwd(当前工作目录)为基准的,不是以脚本文件位置为准。这点和终端直接运行时的行为一致,但容易被忽略。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 若未设置
cwd,默认是打开的工作区根目录,此时"./data/input.csv"指的是工作区下的data/input.csv - 若脚本常被单独打开(比如双击打开某个
.py文件),建议加"cwd": "${fileDirname}",这样"./config.json"就指向脚本同级目录 - 避免硬编码绝对路径,否则换机器或用户就失效;可用
${workspaceFolder}或${env:HOME}等变量替代
调试 Flask/FastAPI 等 Web 服务时传参方式不同
这类框架通常不接受命令行参数启动(而是靠环境变量或配置文件),直接往 args 里塞 --port 5001 会报错或被忽略。
- Flask:用
"env": {"FLASK_RUN_PORT": "5001", "FLASK_ENV": "development"} - FastAPI + Uvicorn:改用
"module": "uvicorn",再配"args": ["main:app", "--host", "0.0.0.0", "--port", "8000"] - 所有参数最终由对应启动器解析,不是 Python 解释器本身处理,所以不能套用普通脚本的
args写法
断点进不去?检查是否用了 python -m 启动模式
有些项目习惯用 python -m mypackage.cli 方式运行,这时不能只填 "module": "mypackage.cli",而要明确指定 "module": "python" 并把模块名放进 args:
{
"name": "CLI via -m",
"type": "python",
"request": "launch",
"module": "python",
"args": ["-m", "mypackage.cli", "--dry-run"]
}
- 漏掉
-m或顺序错(比如写成["mypackage.cli", "-m"])会导致模块找不到 - 如果脚本里有
if __name__ == "__main__":且依赖__file__,用-m模式时__file__是临时路径,可能影响资源加载逻辑
调试带参数的 Python 脚本,关键不在“怎么输”,而在“谁来解析”——是 Python 解释器、-m 模块加载器,还是 uvicorn/Flask 这类第三方启动器。参数必须交给正确的接收方,且路径上下文要匹配,否则断点能打上,但数据永远拿不到。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










