lan*_*ng2 5 python string unicode python-2.7 voluptuous
我正在尝试使用丰富的来验证来自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)
Run Code Online (Sandbox Code Playgroud)
上面的代码生成以下错误:
voluptuous.MultipleInvalid: expected str for dictionary value @ data['www']
Run Code Online (Sandbox Code Playgroud)
但是,如果我u从URL中删除表示法,一切正常.这是一个错误还是我做错了?
PS.我正在使用python 2.7,如果它与它有任何关系.
Python 2.7中有两种字符串类型:str和unicode.在Python 2.7中,str类型不是Unicode字符串,而是字节字符串.
所以这个值u'http://www.foo.com'确实不是一个类型的实例str而且你得到了那个错误.如果您希望str在Python 2.7中同时支持Unicode和Unicode字符串,则需要将架构更改为:
from voluptuous import Any, Schema, Required
schema = Schema({
Required('name'): Any(str, unicode),
Required('www'): Any(str, unicode),
})
Run Code Online (Sandbox Code Playgroud)
或者,为简单起见,如果您总是收到Unicode字符串,那么您可以使用:
schema = Schema({
Required('name'): unicode,
Required('www'): unicode,
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1088 次 |
| 最近记录: |