Сладострастный не в состоянии обрабатывать строки 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,
})
Другие вопросы по тегам