gpt4 book ai didi

python - 使 argparse 对待破折号和下划线相同

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:03 24 4
gpt4 key购买 nike

argparse 用下划线替换可选参数中的破折号以确定它们的目的地:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--use-unicorns', action='store_true')
args = parser.parse_args(['--use-unicorns'])
print(args) # returns: Namespace(use_unicorns=True)

但是用户必须记住选项是--use-unicorns还是--use_unicorns;使用错误的变体会引发错误。

这可能会导致一些挫折,因为代码中的变量 args.use_unicorns 没有明确定义了哪个变体。

如何让 argparse 接受 --use-unicorns--use_unicorns 作为定义这个可选参数的有效方式?

最佳答案

parser.add_argument('--use-unicorns', action='store_true')
args = parser.parse_args(['--use-unicorns'])
print(args) # returns: Namespace(use_unicorns=True)

argparse 将“-”转换为“_”,因为在标志中使用“-”是公认的 POSIX 惯例。但是 args.use-unicones 不是 Python 可接受的。换句话说,它进行翻译,因此 dest 将是有效的 Python 变量或属性名称。

请注意,argparse 不会使用 positionals 执行此转换。在那种情况下,程序员可以完全控制 dest 参数,并且可以选择任何方便的东西。由于 argparse 在访问 Namespace 时仅使用 getattrsetattr,因此对有效 dest 的约束 是最小的。

有两个用户。有你,程序员,有你的最终用户。对您来说方便的可能对其他人来说不是最佳的。

您还可以通过定义optional 来指定destmetavar 使您可以进一步控制帮助 显示。


执行“-”替换的是 parser._get_optional_kwargs:

    if dest is None:
....
dest = dest.replace('-', '_')

关于python - 使 argparse 对待破折号和下划线相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53527387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com