如何在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的文件中,并且您想选择颜色“blue”,您将打开一个终端窗口并键入

~$python my_script.py --color blue

这将运行脚本并将blue作为--color参数传递。脚本将打印如下结果。

输出

Your chosen color is: blue

使用自定义错误消息

处理argparse无效参数的第三种方法是使用自定义错误消息。

示例

在此代码中,我们定义一个名为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参数和子解析器。选择合适的方法将取决于程序的具体需求以及您希望如何处理无效输入。

更新于:2023年8月10日

2K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告