Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在YAML for python cerberus验证程序库中定义强制函数_Python_Validation_Cerberus - Fatal编程技术网

如何在YAML for python cerberus验证程序库中定义强制函数

如何在YAML for python cerberus验证程序库中定义强制函数,python,validation,cerberus,Python,Validation,Cerberus,我试图在YAML中为python cerberus库定义我的验证器模式,因为它更易于人类阅读。我遇到了一个问题,如果我试图在YAML中定义强制函数,就会得到一个SchemaError。从中的示例开始,我将其修改为使用YAML模式 import datetime import yaml st = ''' start_date: type: datetime coerce: to_date ''' schema = yaml.load(st) v = cerberus.Valida

我试图在YAML中为python cerberus库定义我的验证器模式,因为它更易于人类阅读。我遇到了一个问题,如果我试图在YAML中定义强制函数,就会得到一个SchemaError。从中的示例开始,我将其修改为使用YAML模式

import datetime
import yaml
st = '''
start_date: 
    type: datetime
    coerce: to_date
'''
schema = yaml.load(st)
v = cerberus.Validator()
to_date = lambda s: datetime.strptime(s, '%Y-%m-%d')
v.schema = schema
v.validate({'start_date': '2017-10-01'})
我得到一个错误:

SchemaError:{'start_date':[{'Improve':['none或多个规则 验证“,{oneof definition 0':[”必须是可调用类型“],”oneof 定义1':[“必须是列表类型”],“定义2之一”: ['unallowed value to_Date']}]}


是定义基于YAML的模式支持的强制函数,还是需要切换回使用JSON?

您正在模块的全局范围内创建lambda函数。Cerberus验证器不知道您在引用
“to_date”
时指的是那个验证器。因此,您需要在
验证器
子类中定义强制器。是相关文档。

由于JSON是YAML的一个子集,只有当YAML数据不正确时,更改为JSON才能解决您的问题。如果您看看如何在链接的SO中使用JSON[,你会看到,我遵循的是确切的模式,只是用YAML替换JSON,它不起作用。我基本上有两个问题:1)我如何在YAML中指定强制函数,而在JSON中,你只需将其修饰为引号?2)首先为什么我们需要为日期和日期时间指定强制函数?'2017-10-01'是一个标准日期当类型设置为“date”时,应该已经正确解析了。对吗?不,还有。更多的区别,例如,您所指的不是JSON而是Python。1)一点也不。2)查看您所指问题的答案。