我试图使用华丽的方法来验证来自HTTP请求的JSON输入。但是,它似乎不能很好地处理unicode字符串。
from voluptuous import Schema, Required
from pprint import pprint
schema = Schema({
Required('name'): str,
Required('www'): str,
})
data = {
'name': 'Foo',
'www': u'http://www.foo.com',
}
pprint(data)
schema(data)上面的代码会产生以下错误:
voluptuous.MultipleInvalid: expected str for dictionary value @ data['www']但是,如果我将u符号从URL中删除,那么一切都可以正常工作。这是个窃听器还是我做错了?
ps。如果与python2.7有任何关系,我将使用python2.7。
发布于 2015-07-09 11:29:16
Python2.7中有两种字符串类型:str和unicode。在Python2.7中,str类型不是Unicode字符串,而是字节字符串。
因此,值u'http://www.foo.com'实际上不是str类型的实例,您将得到该错误。如果希望同时支持Python2.7中的str和Unicode字符串,则需要将模式更改为:
from voluptuous import Any, Schema, Required
schema = Schema({
Required('name'): Any(str, unicode),
Required('www'): Any(str, unicode),
})或者,为了简单起见,如果您总是接收Unicode字符串,那么您可以使用:
schema = Schema({
Required('name'): unicode,
Required('www'): unicode,
})https://stackoverflow.com/questions/31272504
复制相似问题