python - 性感无法处理 unicode 字符串?

标签 python string python-2.7 unicode voluptuous

我正在尝试使用 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)

上面的代码会产生以下错误:

 voluptuous.MultipleInvalid: expected str for dictionary value @ data['www']

但是,如果我从 URL 中删除 u 符号,一切正常。这是错误还是我做错了?

附言。如果它与它有任何关系,我正在使用 python 2.7。

最佳答案

Python 2.7 中有两种字符串类型:strunicode。在 Python 2.7 中,str 类型不是 Unicode 字符串,而是字节字符串。

因此值 u'http://www.foo.com' 确实不是类型 str 的实例,您会收到该错误。如果您希望在 Python 2.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,
})

关于python - 性感无法处理 unicode 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31272504/

相关文章:

python - 未命名的 Python 对象具有相同的 id

python - 有什么方法可以让一个进程拥有写锁而其他进程只能并行读取?

python - 将数据从表导出到文本文件时出现意外类型错误

python - 在Python中拆分具有未知数量空格的字符串作为分隔符

python - Pip 在虚拟环境 (venv) 中无法工作

python - 如何在单元测试期间验证 Mock mock_calls 列表中的 .__getitem__() 调用

ios - 关于 String 和 c strcpy 的快速问题

python - 使用python从缩短的url中获取完整的url

ios - iOS UIAlertView 中未使用的表达式结果

javascript - "JavaScript objects can be indexed by strings"是什么意思?