首页 > 解决方案 > 可选参数无法识别

问题描述

我正在尝试学习如何使用 argparse,并且在尝试实现可选参数时遇到了问题。这是我所拥有的:

import argparse

def main(num1, num2=None):
    if num1 and num2:
        print(num1 + num2)
    else:
        print(num1)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Add some numbers')
    parser.add_argument('num1', help='The first number')
    parser.add_argument('-num2', help='The second number', action='store_true')

    args = parser.parse_args()
    main(args.num1, args.num2)

我确定这是一个非常简单的问题,但是当我在命令行上传入参数 2 和 3 时出现此错误:

usage: argparse_test.py [-h] [-num2] num1
argparse_test.py: error: unrecognized arguments: 3

为什么论点“无法识别”?

标签: pythonargparse

解决方案


您只定义了一个位置参数 ( num1)。如果您传入两个位置参数,您会期望该错误消息。-num2是一个选项,不接受任何参数。换句话说,这些是有效的调用:

python argparse_test.py -num2 1
python argparse_test.py 1

其他的都不是。

如果你想接受多个位置参数,你会想要这样的:

parser = argparse.ArgumentParser(description='Add some numbers')
parser.add_argument('num1', help='The first number')
parser.add_argument('num2', nargs='?', help='The second number')

这定义num1为必需的位置参数,以及num2将使用 0 或 1 值的位置参数。


推荐阅读