可选参数无法识别

Optional argument not recognized

我正在尝试学习如何使用 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

为什么参数“无法识别”?

您只定义了一个位置参数 (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 个值的位置参数。

注意参数是字符串类型,所以必须将它们从字符串转换为整数,否则,num1 + num2 将附加两个字符串。

您的程序应该如下所示:

import argparse

def main(num1, num2=None):
    if num1 and num2:
        print(int(num1) + int(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')

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