为什么我的 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
而不是 args
的 test
属性(或您使用的任何变量)。要解决此问题,请打印 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)
根据 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
而不是 args
的 test
属性(或您使用的任何变量)。要解决此问题,请打印 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)