根据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
编辑:添加了脚本的输出。
答案 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
(我无法弄清楚你是如何得到你从你给出的链接中发布的代码,这是关于在帮助消息中包含默认值,但希望这无论如何都有帮助。)