Python 如何使用argparse处理无效参数
Argparse是一个Python模块,用于通过定义程序参数、类型、默认值和帮助信息来创建用户友好的命令行界面。该模块可以处理不同类型的参数,并允许创建具有各自参数集的子命令。Argparse生成一个帮助消息,显示可用的选项及其使用方法,并在输入无效参数时引发错误。总的来说,argparse简化了Python程序的强大命令行接口的创建。
使用try和except块
处理argparse的无效参数的一种方法是使用try和except块。
示例
在此代码中,我们首先导入argparse模块并创建一个ArgumentParser对象。
我们使用add_argument()方法向解析器添加一个命令行参数。在这种情况下,我们定义了一个名为–num的参数,它接受一个整数值。
然后,我们使用parse_args()方法解析命令行参数。
在try块内,我们尝试将args.num的值平方,并将结果存储在一个名为result的变量中。
如果为–num传递的参数是有效的整数,则try块将成功执行,并且程序将打印结果。
然而,如果为–num传递了一个无效的参数(例如字符串或浮点数),则try块将引发一个TypeError异常。我们使用except块捕获这个异常,它打印一个错误消息,指示参数无效。
#my_script.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--num", type=int, help="Enter an integer")
args = parser.parse_args()
try:
result = args.num ** 2
print("Result:", result)
except TypeError:
print("Invalid argument. Please enter an integer.")
假设代码在名为my_script.py的文件中,你想求4的平方,你可以打开一个终端窗口并输入:
~$python my_script.py --num 4
这将运行脚本并将整数值4作为–num参数传递。然后脚本将计算4的平方(即16)并打印结果:
输出:
Result: 16
使用choices参数
另一种处理argparse中无效参数的方法是使用choices参数。
示例
在这段代码中,我们再次创建一个ArgumentParser对象,并定义一个名为–color的命令行参数。
然而,在这种情况下,我们使用choices参数来指定–color参数的有效选择列表。任何传递给–color的参数如果不在有效选择列表中,将引发错误。
当调用parse_args()方法时,argparse将自动检查args.color的值是否是有效选择之一。如果是,程序将打印选择的颜色。如果不是,argparse将引发一个指示参数无效的错误。
#my_script.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--color", choices=["red", "green", "blue"], help="Enter a color")
args = parser.parse_args()
print("Your chosen color is:", args.color)
假设代码在名为my_script.py的文件中,并且你想选择颜色“蓝色”,你可以打开一个终端窗口,然后键入:
~$python my_script.py --color blue
执行该脚本并将blue作为–color参数传递。然后脚本将打印结果如下。
输出
Your chosen color is: blue
使用自定义错误消息
使用自定义错误消息处理无效参数的第三种方法是。
示例
在这段代码中,我们定义了一个名为check_positive的自定义函数,它接受一个值作为参数,并检查它是否为正整数。如果值不是正整数,函数会引发一个ArgumentTypeError异常,其中包含自定义的错误消息。
然后,我们定义ArgumentParser对象并添加一个名为–num的参数,该参数使用check_positive函数验证输入。
当调用parse_args()方法时,argparse将自动调用check_positive函数验证输入。如果输入是正整数,程序将打印平方结果。如果不是,argparse将引发一个带有我们在check_positive函数中定义的自定义错误消息的错误。
#my_script.py
import argparse
def check_positive(value):
ivalue = int(value)
if ivalue <= 0:
raise argparse.ArgumentTypeError("Value must be positive.")
return ivalue
parser = argparse.ArgumentParser()
parser.add_argument("--num", type=check_positive, help="Enter a positive integer")
args = parser.parse_args()
result = args.num ** 2
print("Result:", result)
假设代码在一个名为my_script.py的文件中,并且你想将数字9平方,你可以打开一个终端窗口并输入:
~$python my_script.py --num 9
这将运行脚本,并将整数值9作为–num参数传递。然后脚本将计算9的平方(即81),并打印结果:
输出
Result: 81
如果脚本的参数是像这样的-9
~$python my_script.py –num -9
它将显示如下错误
输出
my_script.py: error: argument --num: Value must be positive.
使用nargs参数
argparse中的nargs参数可用于指定特定选项所期望的命令行参数的数量。以下是使用它处理无效参数的示例:
示例
在此代码中,我们创建一个ArgumentParser对象,并定义一个名为–numbers的选项。我们将nargs参数设置为+,这意味着该选项期望一个或多个命令行参数。
然后我们使用parse_args()方法解析命令行参数。
如果至少传递一个整数值给–numbers,程序将计算这些值的总和并打印结果。如果没有传递参数,程序将打印一个提示消息,指示至少需要输入一个整数。
#my_script.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--numbers', nargs='+', type=int, help='Enter a list of integers')
args = parser.parse_args()
if args.numbers is not None:
result = sum(args.numbers)
print("Result:", result)
else:
print("Please enter at least one integer.")
假设代码在名为my_script.py的文件中,您想输入两个参数7和8,您可以打开一个终端窗口,并键入:
~$python my_script.py --numbers 7 8
这将运行脚本并将整数值7和8作为–numbers参数传递。然后脚本将计算7和8的和(即15)并打印结果:
输出
Result: 15
如果脚本的参数是空(无参数)就像这样:
~$python my_script.py –numbers
它会显示如下错误
输出
my_script.py: error: argument --numbers: expected at least one argument
结论
总之,有几种方法可以在Python中使用argparse处理无效的参数,包括使用try-except块、choices参数、自定义错误消息、nargs参数和子解析器。选择合适的方法将取决于您程序的具体需求以及您希望如何处理无效的输入。