python - 可选参数无法识别
问题描述
我正在尝试学习如何使用 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 值的位置参数。
推荐阅读
- python - 特征缩放以相同的比例转换列中的不同值
- excel - 使用 Excel VBA 在自己单独的 Microsoft Excel 实例中运行文件
- php - 返回一个数组中不存在于另一个数组中的所有值
- angular - 如何在 ASP.NET Core 和 Angular 上正确实施重置密码
- powershell - 如何使用 PowerShell 循环重命名和读取文件?
- java - Spring Data JPA:Spring in Action 中的示例不运行
- c# - 在 ubuntu 操作系统中,当我尝试上传文件时,会自动投影自己添加的根路径
- javascript - 变量“resultToReturn”没有输出值
- roku - 从初始场景过渡到另一个场景
- php - laravel 新项目未运行仍在浏览器中加载