Python argparse的一个问题?在遇到未预期的关键字参数 'nargs' 时,'nargs' 和 'action' 会崩溃
请做个基本的自检。
这段代码:
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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。