我使用的是Python包argparse, struct 简单

当我try 添加到我的解析器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)

当我try 它与增加formatter_class它是工作 它也与其他格式化程序类(如formatter_class=argparse.RawDescriptionHelpFormatter)一起工作

我也试过prog属性,没有

推荐答案

简单的回答:type参数对add_argument默认为None,而不是str.


不那么简短的回答:一个类型的None behaves像一个类型的str,但不工作与MetaVarTypeHelpFormatter.

MetaVarTypeHelpFormatter要求每个参数都有一个显式类型.

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

它的文档化目的是使用参数的type属性的名称作为元变量,该属性默认为None.

虽然参数的默认类型是str,但这只是意味着如果参数的type属性是None,则保留从参数列表中提取的str值,或者如果不是None,则转换为给定类型.

>>> p = argparse.ArgumentParser()
>>> print(p.add_argument("foo").type)
None
>>> print(p.add_argument("foo", type=int).type)
<class 'int'>

每个解析器都维护一个type registry,这意味着您可以将自己的任意值映射添加到可调用程序中以生成类型.例如,

>>> import argparse
>>> p = argparse.ArgumentParser()
>>> p.register('type', 'lowercase', lambda x: x.lower())
>>> p.add_argument("foo", type='lowercase')
_StoreAction(option_strings=[], dest='foo', nargs=None, const=None, default=None, type='lowercase', choices=None, required=True, help=None, metavar=None)
>>> p.parse_args(["HELLO WORLD"])
Namespace(foo='hello world')

最初,类型注册表中的条目映射None

def identity(string):
    return string

这就是为什么带有"type"None的参数的行为就像你显式地提供了str.

类型注册表没有被文档化,除了这个条目之外,它也不会被再次使用,因此不清楚它为什么存在.作者可能有计划使用它更多从未实现.(请注意,每个解析器都有一个操作注册表,它被使用得更频繁,这就是为什么你可以指定操作'append''store_const',而不是直接指定非公共类_AppendAction_StoreConstAction.

Python相关问答推荐

Chatgpt API不断返回错误:404未能从API获取响应

使用scipy. optimate.least_squares()用可变数量的参数匹配两条曲线

分组数据并删除重复数据

如何根据日期和时间将状态更新为已过期或活动?

三个给定的坐标可以是矩形的点吗

将jit与numpy linSpace函数一起使用时出错

'discord.ext. commanders.cog没有属性监听器'

如何让剧作家等待Python中出现特定cookie(然后返回它)?

对象的`__call__`方法的setattr在Python中不起作用'

Python列表不会在条件while循环中正确随机化'

合并帧,但不按合并键排序

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

基于Scipy插值法的三次样条系数

如何在信号的FFT中获得正确的频率幅值

SpaCy:Regex模式在基于规则的匹配器中不起作用

从列表中分离数据的最佳方式

Django更新视图未更新

如何从一个维基页面中抓取和存储多个表格?

Python:在cmd中添加参数时的语法

删除另一个div中的特定div容器