为何Python argparse不再文档化nargs=REMAINDER?
在Python的argparse模块文档中,3.8版本明确指出nargs可设置为:
argparse.REMAINDER:将所有剩余命令行参数收集到列表中,常用于调度其他命令行工具的实用程序。
但从3.9版本文档开始,这段说明被移除了,且未标注弃用。该功能具备其他方式无法替代的实用价值¹:nargs=REMAINDER与nargs='*'的核心区别在于,使用REMAINDER时,argparse从该点开始不再解析以-开头的选项。例如执行mycmd -q run bash -c exit时,-c不会被解析为mycmd的选项,效果等同于使用nargs='*'时手动添加--的写法:mycmd -q run -- bash -c exit。
3.9版本文档的其他章节还曾提及过该特性:
这些[混合]解析器不支持所有argparse特性,使用不支持的特性会引发异常,尤其不支持子解析器、argparse.REMAINDER以及包含可选参数和位置参数的互斥组。
但到了3.11版本文档,连这类提及也被移除了,而该功能在最新发布的Python 3.11.4中依然可以正常使用。
核心疑问
为何argparse.REMAINDER特性会从文档中被移除?
提问背景
我提出这个问题,是因为答案会直接影响我在Python参数解析器编程中的一系列决策,相关考量包括:
- 该API是否存在影响使用的潜在缺陷,是否意味着我的代码存在问题?
- 是否需要为该API寻找合适的替代方案?
- 既然未标记弃用,是否应在新代码中继续使用该API?
- 是否应将现有使用该API的代码转换为其他实现方式?
注:此类问题的答案不仅取决于
nargs=REMAINDER的具体使用场景,还可能涉及主观判断,因此不在本问题的讨论范围内。
¹ 补充说明:nargs=REMAINDER与nargs='*'的行为差异如前文所述,这是该特性不可替代的核心原因。
内容的提问来源于stack exchange,提问作者cjs

