赞
踩
from schema import Schema
Schema(int).validate(10)
10
Schema(int).validate('10')
SchemaUnexpectedTypeError: '10' should be instance of 'int'
可见Schema会去验证validate方法传入的对象是不是所指定的类型,是则返回传入的数据,
否则抛出一个SchemaError的异常(SchemaUnexpectedTypeError是SchemaError的子类)。
Schema(lambda x: 0<x<10).validate(5)
5
Schema(lambda x: 0<x<10).validate(57)
SchemaError: <lambda>(57) should evaluate to True
可见Schema会把validate方法传入的值传入到对应的函数里面作为参数,如果函数返回值为True则返回输入数据,否则抛出异常。
from schema import Schema, And
Schema(And(str, lambda s: len(s) > 2)).validate('abcd')
'abcd'
#use转换数值类型
>> Schema(Use(int)).validate('123')
123
Schema([int, float]).validate([1, 2, 3, 4.0])
[1, 2, 3, 4.0]
#相当于,对于[1, 2, 3, 4.0]当中的任何一个元素,必须是int或者float才行(注意是or的关系)
Schema({'name': str, 'age': int}).validate({'name': 'foobar', 'age': 18})
{'age': 18, 'name': 'foobar'}
Schema({'name': str, 'age': int}).validate({'name': 'foobar'})
SchemaMissingKeyError: Missing keys: 'age'
#首先,明确两个概念,Schema类传入的字典,称之为模式字典,valdiate方法传入的字典称之为数据字典。
#首先,Schema会判断, 模式字典和数据字典的key是否完全一样,不一样的话直接抛出异常。如果一样,就去拿数据字典的value去验证模式字典相应的value,如果数据字典的全部value都可以验证通过的话才返回数据,否则抛出异常,是不是感觉这种验证顿时感觉清爽了呢?
#option 是可选项
from schema import Optional, Schema
Schema({'name': str, Optional('age'): int}).validate({'name': 'foobar'})
{'name': 'foobar'}
Schema({'name': str, Optional('age', default=18): int}).validate({'name': 'foobar'})
{'age': 18, 'name': 'foobar'}
#我想让Schema只验证传入字典中的一部分数据,可以有多余的key但是不要抱错,怎么做?
Schema({'name': str, 'age': int}, ignore_extra_keys=True).validate({'name': 'foobar', 'age': 100, 'sex': 'male'})
{'age': 100, 'name': 'foobar'}
#Schema自带的类(Use、And、Or、Regex、Schema等)都有一个参数error,可以自定义错误信息
Schema({'name': str, 'age': Use(int, error='年龄必须是整数')}).validate({'name': 'foobar', 'age': 'abc'})
SchemaError: 年龄必须是整数
#ignore_extra_keys 忽略其他key的检查
schema = Schema({'name': str}, ignore_extra_keys=True)
schema.validate({'name': 'Sam', 'age': '42'})
{'name': 'Sam'}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。