Сладострастный не в состоянии обрабатывать строки Unicode?
Я пытаюсь использовать сладострастный для проверки ввода JSON из HTTP-запроса. Тем не менее, он, кажется, не обрабатывает 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, все работает отлично. Это ошибка или я делаю это неправильно?
пс. Я использую Python 2.7, если он имеет какое-либо отношение к нему.
1 ответ
В Python 2.7 есть два типа строк: str
а также unicode
, В Python 2.7 str
тип не является строкой Unicode, это строка байтов.
Так что ценность u'http://www.foo.com'
на самом деле не является экземпляром типа str
и вы получаете эту ошибку. Если вы хотите поддержать оба str
и строки Unicode в Python 2.7, вам нужно изменить схему на:
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,
})