前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >schema 验证python数据格式

schema 验证python数据格式

作者头像
py3study
发布2020-01-15 10:53:57
1K0
发布2020-01-15 10:53:57
举报
文章被收录于专栏:python3python3
  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'}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • And代表两个条件必须同时满足,or是满足其中之一
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档