
Click 默认将参数名转为小写以适配 Python 命名规范,导致大写形参(如 PATH)无法被正确注入;启用 case_sensitive=True 可强制保留原始大小写,解决 TypeError: got an unexpected keyword argument 'path' 错误。
click 默认将命令行参数名标准化为小写(例如 `"path"` 被映射为 `'path'`),因此当函数定义使用大写形参(如 `def f1(path):`)时,click 会尝试以小写关键字 `path=` 调用该函数,从而触发 `typeerror: f1() got an unexpected keyword argument 'path'`。解决此问题的关键是显式启用大小写敏感模式。
Click 提供了 case_sensitive 参数(默认为 False),将其设为 True 后,框架将严格按装饰器中声明的参数名(包括大小写)进行参数绑定,不再自动转换为小写。
以下为修复后的完整示例:
from rich.traceback import install
install(show_locals=True)
import click
@click.command(case_sensitive=True) # ✅ 关键:启用大小写敏感
@click.argument("PATH", envvar="PATH", nargs=-1, type=click.Path())
def f1(PATH):
print("Received paths:", PATH)
if __name__ == "__main__":
f1()
⚠️ 注意事项:
- case_sensitive=True 必须作用于 @click.command()(或 @click.group()),对 @click.argument() 或 @click.option() 单独设置无效;
- 启用后,所有参数名(包括 @argument 和 @option 的 nargs, default, required 等行为)均保持原始大小写语义,但需确保函数签名与装饰器中声明的名称完全一致(含大小写);
- 若同时使用环境变量(如 envvar="PATH"),注意避免与系统环境变量冲突——此处仅为演示,实际项目中建议使用更明确的变量名(如 MY_APP_PATH)。
该配置适用于需要严格匹配命名约定、与外部系统交互(如大写环境变量协议)或维护特定 API 兼容性的场景。











