【问题标题】:voluptuous unable to handle unicode string?妖娆无法处理 unicode 字符串?
【发布时间】:2015-09-25 04:09:38
【问题描述】:

我正在尝试使用 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 符号,一切正常。这是一个错误还是我做错了?

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

【问题讨论】:

  • 为什么你的 url 使用 unicode?​​span>
  • @WardC 我并没有特别这样做。以上是缩小问题范围的最小版本。在实际代码中,数据以纯字符串形式呈现,通过 nodetest 并以某种方式在达到 voluptuous 时以 unicode 结尾。

标签: python string python-2.7 unicode voluptuous


【解决方案1】:

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,
})

【讨论】:

猜你喜欢
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 2014-12-05
  • 2010-11-01
  • 1970-01-01
  • 2015-11-16
相关资源
最近更新 更多