为什么 Python `argparse` 停止记录 nargs=REMAINDER?

问题描述 投票:0回答:1

在 Python

argparse
模块的文档中,3.8 文档 指出
nargs
可以设置为:

argparse.REMAINDER
。所有剩余的命令行参数都收集到一个列表中。这对于分派到其他命令行实用程序的命令行实用程序通常很有用。

这已从 3.9 文档中删除,尽管没有提到它已被弃用,也没有任何充分的理由这样做,因为它提供了其他方式显然没有提供的有用功能。仍然在页面的其他地方提到过

这些[混合]解析器不支持所有 argparse 功能,如果使用不支持的功能,将会引发异常。特别是,不支持子解析器、argparse.REMAINDER 以及包含选项和位置的互斥组。

但即使如此,[3.10 文档] 中也删除了这一点。然而,即使在最新发布的 Python 3.11.4 版本中,该功能仍然存在。

那么为什么它从文档中删除了?


1

nargs=REMAINDER

nargs='*'
 不同:使用 
REMAINDER
 意味着 argparse 从那时起将不再尝试解析选项(从 
-
 开始)。因此,对于 
REMAINDER
mycmd -q run bash -c exit
 不会尝试将 
-c
 解析为 
mycmd
 的选项,而是将该行视为 
mycmd -q run -- bash -c exit
'*'
 一起使用。

[3.10文档]

python argparse
1个回答
0
投票
您可以在

此处查看有关为何删除此内容的讨论。

本质上,它已从文档中删除,因为它非常脆弱。该功能的原始作者编写了一个文档示例,但对该示例进行了非常小的更改(例如将

REMAINDER

 参数放在前面)破坏了它。

已经可以使用parser.parse_known_args()

来捕获未解析的参数,因此
REMAINDER
既是另一个功能的重复,并且比它更少经过测试和深思熟虑。

请参阅

herehere 了解删除文档的 PR。

© www.soinside.com 2019 - 2024. All rights reserved.