python3中的argparse - 无法在名称中添加参数?

use*_*061 -4 python python-3.x

这是我的示例程序:

   #!/usr/bin/python

   import os
   import string
   import argparse

   parser = argparse.ArgumentParser(description="get all versions")
   parser.add_argument(test-version)
   version = parser.parse_args()

   print(version.test-version)
Run Code Online (Sandbox Code Playgroud)

当我运行python脚本时,它会抛出错误:

AttributeError: 'Namespace' object has no attribute 'test'
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用参数"test"而不是"test-version"的相同示例,它可以正常工作.

对我来说,重要的是 - 在我的论证名称中.

我该如何解决这个问题?

谢谢

Mor*_*app 6

问题是你不能-在变量名中有一个,因为它是减法运算符.因此,在您的代码中,解释器正在尝试执行version.test - version此操作,因为version没有.test属性而您无法从某些内容中减去命名空间.如果要-在参数中使用,则需要在中设置dest=参数.add_argument().

例如:

import argparse

parser = argparse.ArgumentParser(description="get all versions")
parser.add_argument('--test-version', dest='test_version')
version = parser.parse_args(['--test-version', '1'])

print(version.test_version)
Run Code Online (Sandbox Code Playgroud)

或者如果你想将它作为状态标志:

import argparse

parser = argparse.ArgumentParser(description="get all versions")
parser.add_argument('--test-version', action='store_true', dest='test_version')
version = parser.parse_args(['--test-version'])

print(version.test_version)
Run Code Online (Sandbox Code Playgroud)

  • 你实际上不需要`dest ='test_version'.默认情况下,Argparse会将`--test-version`转换为`test_version`. (3认同)