ОК так ...ast.literal_eval как-то метания UnicodeDecodeError
- строка Unicode будет закодирован в Python 2.x строку (на самом деле, последовательность байт)
- строка Python 2.x получает декодируется в строку Unicode
Python UnicodeDecodeError - Am I misunderstanding encode?
Я получил этот код Python 2.7
try:
print '***'
print type(relationsline)
relationsline = relationsline.decode("ascii", "ignore")
print type(relationsline)
relationsline = relationsline.encode("ascii", "ignore")
print type(relationsline)
relations = ast.literal_eval(relationsline)
except ValueError:
return
except UnicodeDecodeError:
return
Последняя строка в коде выше, иногда бросает
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc in position 341: ordinal not in range(128)
Я думаю, что это (1) начать со строкой с некоторым (неизвестным) шифровальных (2) декодировать его в тип юникода, представляющая строку символов, набор символов Юникода с кодировками ascii, игнорируя все символы, которые не могут быть закодированы с помощью ascii (3) кодируют тип unicode в строку с кодировкой ascii, игнорируя все символы, которые не могут быть представлены в ASCII.
Вот полный трассировки стека:
Traceback (most recent call last):
File "outputprocessor.py", line 69, in <module>
getPersonRelations(lines, fname)
File "outputprocessor.py", line 41, in getPersonRelations
relations = ast.literal_eval(relationsline)
File "/usr/lib/python2.7/ast.py", line 49, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "/usr/lib/python2.7/ast.py", line 37, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc in position 341: ordinal not in range(128)
^
SyntaxError: invalid syntax
Но это явно не так-то. Еще большее недоумение заключается в том, что UnicodeDecodeError не улавливает UnicodeDecodeError. Что мне не хватает? Может быть, это проблема? http://bugs.python.org/issue22221
ваш текст ascii - нет. Строгий ascii - это 7-битная кодировка (0x00 -> 0x7F), и у вас есть char> 0x7F, что означает, что это не ascii. возможно, это расширенный ascii, iso8859-1 или что-то еще. но это не «ascii». –
Это будет легче отладить, если вы сможете найти пример, который последовательно выдает ошибку. Рекомендуется использовать [MCVE] (http://stackoverflow.com/help/mcve): минимальный, отдельный образец кода, который запускается и создает ошибку, о которой вы говорите при ее запуске. – user2357112
Также, пожалуйста, покажите нам полную трассировку стека исключения. – user2357112