Den*_*ski 7 python validation parameters
我想编写一个带3个参数的python脚本.第一个参数是字符串,第二个是整数,第三个也是整数.
我想在开始时进行条件检查,以确保提供适当数量的参数,并且在继续之前它们是正确的类型.
我知道我们可以使用sys.argv来获取参数列表,但我不知道如何在将参数分配给我的本地变量以供使用之前测试参数是否为整数.
任何帮助将不胜感激.
Mat*_*kel 10
更一般地,您可以使用isinstance查看某个东西是否是类的实例.
显然,在脚本参数的情况下,一切都是字符串,但如果您正在接收函数/方法的参数并想要检查它们,您可以使用:
def foo(bar):
if not isinstance(bar, int):
bar = int(bar)
# continue processing...
Run Code Online (Sandbox Code Playgroud)
您还可以将一组类传递给isinstance:
isinstance(bar, (int, float, decimal.Decimal))
Run Code Online (Sandbox Code Playgroud)
如果您正在运行Python 2.7,请尝试导入argparse.Python 3.2也将使用它,它是解析参数的新首选方法.
Python 文档页面中的示例代码包含一个int列表,并查找传递的数字的最大值或总和.
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
Run Code Online (Sandbox Code Playgroud)
如果输入不支持像这样的操作,Python的方法是尝试失败
try:
sys.argv = sys.argv[:1]+map(int,sys.argv[1:])
except:
print 'Incorrect integers', sys.argv[1:]
Run Code Online (Sandbox Code Playgroud)