为什么我的argparse没有显示默认值?

时间:2016-04-08 01:25:30

标签: python argparse

根据this question,当我输入时,这个名为“parse_fail.py”的脚本应该打印default = 1:

python parse_fail.py --help 

在命令行上,但它没有。为什么不呢?

#parse_fail.py

import argparse
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("--test", type=int, dest='test', default=1)
parser.parse_args()
args_dict = vars(parser.parse_args())
locals().update(args_dict)
print test

当我运行此脚本时,我得到:

$ python parser_fail.py  --help
usage: parser_fail.py [-h] [--test TEST]

optional arguments:
  -h, --help   show this help message and exit
  --test TEST

编辑:添加了脚本的输出。

2 个答案:

答案 0 :(得分:4)

显然你需要包含一个非空的帮助字符串。

这有效:

import argparse
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("--test", type=int, dest='test', help="WHY NO DEFAULT???", default=1)
parser.parse_args()
args_dict = vars(parser.parse_args())
locals().update(args_dict)
print test



$ python parser_fail.py -h
usage: parser_fail.py [-h] [--test TEST]

optional arguments:
  -h, --help   show this help message and exit
  --test TEST  WHY NO DEFAULT??? (default: 1)

答案 1 :(得分:1)

您没有得到该结果,因为您尚未定义变量test。相反,您会收到一条错误消息,实际上会告诉您这一点。您的代码中没有任何内容定义test,因此尝试打印它是一个错误。

你犯了两个错误。首先,您将丢弃parser.parse_args()的返回值,这是存储命令行参数值的位置。要解决此问题,请将其分配给某个变量。

args = parser.parse_args()

其次,您正在尝试打印test而不是test的{​​{1}}属性(或您使用的任何变量)。要解决此问题,请打印args而不是args.test

test

由于你只对print args.test 属性的值感兴趣,你可以将它们组合起来(当然,你通常会想要使用多个参数值,所以你可能不会这样做这是一个真实的剧本):

test

把它放在一起,这有效:

print parser.parse_args().test

(我无法弄清楚你是如何得到你从你给出的链接中发布的代码,这是关于在帮助消息中包含默认值,但希望这无论如何都有帮助。)