Python argparse的一个问题?在遇到未预期的关键字参数 'nargs' 时,'nargs' 和 'action' 会崩溃

编程语言 2026-07-11

请做个基本的自检。

这段代码:

import argparse

def parse_cmd_line():
    parser = argparse.ArgumentParser( )

    parser.add_argument('-c', '--create',  nargs='*', action="store_true")

    args, flist = parser.parse_known_args()


if __name__ == "__main__" :
    parse_cmd_line()

在执行时:python3 parse.py -c

会生成如下:

raz@WS-5N2PCV2:~/dev/tools/arc$ python3 parse.py -c
Traceback (most recent call last):
  File "/home/raz/dev/tools/arc/parse.py", line 13, in <module>
    parse_cmd_line()
  File "/home/raz/dev/tools/arc/parse.py", line 7, in parse_cmd_line
    parser.add_argument('-c', '--create',  nargs='*', action="store_true")
  File "/usr/lib/python3.12/argparse.py", line 1489, in add_argument
    action = action_class(**kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^
TypeError: _StoreTrueAction.__init__() got an unexpected keyword argument 'nargs'

如果动作是 "count",结果也类似。nargs的位置不会影响输出。

我想我没做错什么(是吗?)

解决方案

当你使用 action="store_XXX"action="count" 时,该选项不需要任何额外的参数——它只是存储一个常量值或统计该选项的出现次数。所以 nargs 不适用,你会因为这个参数的组合不一致而得到错误。

使用 action="store" 时没有错误,因为它确实使用了后面的参数。nargs="*" 让它把后面的所有参数收集到一个列表中。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章