python argparse数据类型

时间:2014-07-06 15:25:46

标签: python python-3.x argparse

我在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也似乎没有改变任何东西。

提前致谢

2 个答案:

答案 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...']