如何在 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

这将运行脚本并将“蓝色”作为 --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

结论

总而言之,有多种方法可以使用 argparse 在 Python 中处理无效参数,包括使用 try-except 块、choices 参数、自定义错误消息、nargs 参数和子解析器。选择合适的方法将取决于程序的具体需求以及您希望如何处理无效输入。

更新于: 2023-08-10

2K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

立即开始
广告