在 python argparse 包中添加“formatter_class”MetavarTypeHelpFormatter 时,“--help”不再起作用

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

我正在使用 python 包 argparse, 配置简单

当我尝试添加到我的解析器时

formatter_class=argparse.MetavarTypeHelpFormatter
我收到错误:

AttributeError: 'NoneType' object has no attribute '__name__'

其他人也遇到过这种情况吗?也许知道为什么?

这是我的代码:

import argparse

argParser = argparse.ArgumentParser(
    formatter_class=argparse.MetavarTypeHelpFormatter
)

argParser.add_argument("models", default='', nargs='+',
                       help="Which model(s) to execute")


args = argParser.parse_args()
print(args)

当我在不添加

formatter_class
的情况下尝试它时,它正在工作 它还可以与其他格式化程序类一起使用,例如
formatter_class=argparse.RawDescriptionHelpFormatter

我也尝试过使用

prog
属性和不使用

python argparse
1个回答
0
投票

MetaVarTypeHelpFormatter
需要每个参数都有一个显式类型。

argParser.add_argument("models", default='', nargs='+', type=int,
                   help="Which model(s) to execute")

其记录的目的是使用参数的

type
属性的名称作为元变量,并且该属性默认为
None

虽然参数的默认类型是

str
,但这仅意味着如果参数的
str
属性是
type
,则保留从参数列表中获取的
None
值,如果不是,则转换为给定类型
None

>>> p = argparse.ArgumentParser()
>>> print(p.add_argument("foo").type)
None
>>> print(p.add_argument("foo", type=int).type)
<class 'int'>
© www.soinside.com 2019 - 2024. All rights reserved.