schema 验证python数据格式

简介:
  1. 给Schema类传入类型(int、str、float等)

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的子类)。

  1. 给Schema类传入可调用的对象(函数、带call的类等)

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则返回输入数据,否则抛出异常。

  1. 给Schema类传入带有validate方法的对象
    Schema也内置了一些类(Use、And、Or等等),这些类的实例都带有validate方法,亦可作为Schema的参数传入,例如:

from schema import Schema, And

And代表两个条件必须同时满足,or是满足其中之一

Schema(And(str, lambda s: len(s) > 2)).validate('abcd')
'abcd'
#use转换数值类型

>> Schema(Use(int)).validate('123')
123

  1. 给Schema类传入容器对象(list、tuple、set等)
    例如:

Schema([int, float]).validate([1, 2, 3, 4.0])
[1, 2, 3, 4.0]
#相当于,对于[1, 2, 3, 4.0]当中的任何一个元素,必须是int或者float才行(注意是or的关系)

  1. 给Schema传入一个字典对象(大部分使用Schema的场景都是传入字典对象,这个很重要)

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都可以验证通过的话才返回数据,否则抛出异常,是不是感觉这种验证顿时感觉清爽了呢?

  1. faqs
    #Schema传入字典很好用,但是我有的数据是可选的,也就是说有的key可以不提供怎么办?

#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'}










本文转自 帅枫小明 51CTO博客,原文链接:http://blog.51cto.com/576642026/2054099,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
数据采集 机器学习/深度学习 Web App开发
Python爬虫如何应对贝壳网的IP封禁与人机验证?
Python爬虫如何应对贝壳网的IP封禁与人机验证?
|
9月前
|
数据采集 存储 数据可视化
2025python实战:利用海外代理IP验证广告投放效果
本文介绍了如何利用Python结合海外代理IP技术,验证广告在不同国家的实际投放效果。通过模拟各地网络环境访问广告页面,检查内容是否与计划一致,并生成曝光报告。具体实现包括:获取高质量代理IP、使用Selenium或Playwright模拟用户行为、解析广告内容及生成可视化报告。案例显示,该方法能有效确保广告精准投放,优化策略并节省预算。
|
11月前
|
数据采集 文字识别 API
Python爬虫模拟登录并跳过二次验证
Python爬虫模拟登录并跳过二次验证
|
JSON 数据格式 Python
Python编程:利用JSON模块编程验证用户
Python编程:利用JSON模块编程验证用户
142 1
|
Python
【Leetcode刷题Python】946. 验证栈序列
LeetCode题目“946. 验证栈序列”的Python解决方案,通过模拟栈的压入和弹出操作来验证给定的两个序列是否能通过合法的栈操作得到。
206 6
|
安全 网络安全 数据安全/隐私保护
HTTPS 请求中的证书验证详解(Python版)
HTTPS 请求中的证书验证详解(Python版)
967 0
使用Python实现简易的用户登录验证功能
这篇文章将向你展示如何使用Python语言进行程序设计,实现一个简易的用户登录验证功能。 该功能允许用户输入由字母和数字任意组合而成的用户名和密码,并通过while循环不断地提示用户输入,直到凭证正确为止。所有凭证信息将被存储在一个字典中,以便进行匹配验证。
|
存储 算法 数据可视化
python多种算法对比图解实现 验证二叉树搜索树【力扣98】
python多种算法对比图解实现 验证二叉树搜索树【力扣98】
|
存储 算法 Java
【经典算法】LeetCode 125. 验证回文串(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 125. 验证回文串(Java/C/Python3实现含注释说明,Easy)
207 0
|
数据安全/隐私保护 Python
【Python 训练营】N_1 验证密码
【Python 训练营】N_1 验证密码
107 0

推荐镜像

更多