如何解决无法识别可选参数
我正在尝试学习如何使用 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 个值的位置参数。
注意参数是字符串类型,所以必须将它们从字符串转换为int,否则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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。