我在python 3.4中使用args.parse遇到了一个奇怪的问题,我需要一些帮助。我刚开始使用python,所以它可能是一些愚蠢的东西。
我正在传递一个论点
parser.add_argument('-solr', type=str, default='http://localhost:8983/solr/', nargs='+', help='Address of Solr server (ex: http://192.168.137.128:8983/solr/)')
它应该只是一个论点,一直都是。如果我实际传递参数,它将被存储为数组,我将需要通过args.solr [0]访问它。但是,如果我没有传递任何参数,将使用默认值,但它将被存储为字符串,因此,args.solr [0]将是' h'。
是什么给出的?我试图玩弄瑕疵,但即使把它设置为1也似乎没有改变任何东西。
提前致谢
答案 0 :(得分:1)
使用nargs = '?'
。它停止将输入作为数组。
parser.add_argument('--solr', type=str, default='http://localhost:8983/solr/',nargs='?',help='Address of Solr server (ex: http://192.168.137.128:8983/solr/)')
答案 1 :(得分:0)
由于您的参数已被标记(名称以-
开头),您根本不需要设置nargs
- 请使用其默认None
。除非您使用标志字符串,否则它是可选的(不是必需的)。
parser.add_argument('--solr', default='http://localhost:8983/solr/',
help='Address of Solr server (ex: %(default)s)')
这样,样本输入产生:
In [51]: parser.parse_args([])
Out[51]: Namespace(solr='http://localhost:8983/solr/')
In [52]: parser.parse_args(['--solr','test'])
Out[52]: Namespace(solr='test')
In [50]: parser.print_help()
usage: ipython [-h] [--solr SOLR]
optional arguments:
-h, --help show this help message and exit
--solr SOLR Address of Solr server (ex: http://localhost:8983/solr/)
使用较长的可选名称,--
优于-
。默认类型为str
,因此您无需指定。我已将%(default)s
添加到帮助中,因此您不必重复默认值。
如果您确实希望结果成为列表,例如['test']
,使用nargs=1
并将默认值放在列表中,例如default=['http...']
。