如何使用Python中的选项限制参数值?
在Python中,可以使用argparse模块来处理命令行参数。该模块可以轻松解析命令行参数并生成帮助文档。在实际开发中,我们有时需要限制参数的值域,比如限制一个参数只能输入数字。本文将介绍如何使用Python中的argparse模块来实现选项限制参数值。
阅读更多:Python 教程
示例代码
以下是一个简单的示例代码,该示例限制了参数-n只能输入1到10之间的数字。
import argparse
parser = argparse.ArgumentParser(description='ArgumentParser Example')
parser.add_argument('-n', '--number', type=int, choices=range(1, 11), required=True,
help='an integer between 1 and 10')
args = parser.parse_args()
print(args.number)
运行上面的代码并输入超出限制范围的参数:
python test.py -n 11
运行结果如下:
usage: test.py [-h] -n {1,2,3,4,5,6,7,8,9,10}
test.py: error: argument -n/--number: invalid choice: 11 (choose from 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
可以看到,argparse模块自动捕获了参数错误并提供了错误信息和帮助文档。
代码解析:
- 通过
argparse.ArgumentParser()
创建ArgumentParser
对象; - 使用
add_argument()
方法定义number
参数,定义该参数只能输入整数类型(type=int
),并且只能输入1到10之间的数字(choices=range(1, 11)
); - 使用
args = parser.parse_args()
解析参数并保存到args
变量中; - 打印参数值。
更多限制可以参考
在实际开发中,可能有更多的需要限制的需求,下面列出了一些其他的选项来限制参数值。
限制最小值和最大值
parser.add_argument('-n', '--number', type=int, choices=range(1, 11), metavar='N', required=True,
help='an integer between 1 and 10')
使用上述代码可限制参数值在1到10之间,如果需要限制最小值和最大值,可以使用add_argument()
方法参数的min
和max
选项来实现。例如,要求一个参数的值必须在5到15之间,则可以使用如下代码:
parser.add_argument('-n', '--number', type=int, metavar='N', required=True,
help='an integer between 5 and 15')
parser.add_argument('--min', type=int, metavar='N', default=5,
help='the minimum value of the number')
parser.add_argument('--max', type=int, metavar='N', default=15,
help='the maximum value of the number')
args = parser.parse_args()
if not (args.min <= args.number <= args.max):
parser.error(f'number {args.number} is not between {args.min} and {args.max}')
在以上代码中,我们没有直接使用choices
选项,而是使用了min
和max
选项。这里用了一个额外的判断语句,如果参数值不在指定范围内,则使用parser.error()
方法报告错误。
限制参数格式
有时需要限制参数的格式,比如要求参数必须为URL或日期格式。使用add_argument()
方法参数的type
选项来实现。例如,要求一个参数必须为日期格式,可以使用如下代码:
import argparse
import datetime
parser = argparse.ArgumentParser(description='ArgumentParser Example')
parser.add_argument('-d', '--date', type=lambda d: datetime.datetime.strptime(d, '%Y-%m-%d'), required=True,
help='a date in format YYYY-MM-DD')
args = parser.parse_args()
print(args.date)
运行上面的代码并输入错误格式的参数:
python test.py -d 2021/02/01
运行结果如下:
usage: test.py [-h] -d DATE
test.py: error: argument -d/--date: invalid value '2021/02/01' (time data '2021/02/01' does not match format '%Y-%m-%d')
在上面的代码中,我们使用了datetime
模块中的strptime()
方法将输入的字符串转为日期对象。
限制参数个数
使用add_argument()
方法参数的nargs
选项可以实现限制参数个数的功能。例如,要求一个参数只能输入两个值,则可以使用如下代码:
import argparse
parser = argparse.ArgumentParser(description='ArgumentParser Example')
parser.add_argument('-c', '--color', type=str, nargs=2, required=True,
help='two color names')
args = parser.parse_args()
print(args.color)
在以上代码中,我们使用了nargs
选项限制了参数个数为2。
限制参数必须存在
有时候需要限制参数必须存在,可以使用add_argument()
方法参数的action
选项来实现。例如,要求执行脚本必须带有一个--verbose
或-v
选项,则可以使用如下代码:
import argparse
parser = argparse.ArgumentParser(description='ArgumentParser Example')
parser.add_argument('--verbose', '-v', action='store_true',
help='enable verbose mode')
args = parser.parse_args()
if not args.verbose:
parser.error('verbose argument must be present')
在以上代码中,我们使用了action
选项,该选项的值为store_true
,表示如果--verbose
或-v
选项存在,则使用True
存储,否则使用False
存储。同时引入了额外的判断语句,如果参数不存在,则使用parser.error()
方法报告错误。
结论
使用Python中的argparse模块可以轻松处理命令行参数,限制参数值域是开发中常见的需求。本文介绍了如何使用argparse模块来实现选项限制参数值的功能,并给出了多种示例代码以供参考。