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

Why doesn't my argparse show default values?

根据 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

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

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

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

args = parser.parse_args()

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

print args.test

由于您只对 test 属性的值感兴趣,因此您可以将这些组合起来(当然,您通常希望使用多个参数值,因此您可能不会不要在真实脚本中执行此操作):

print parser.parse_args().test

将它们放在一起,这有效:

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

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

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

这个有效:

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)