Ответ 1
Вы используете Python 2.x, и он попытается автоматически преобразовать unicode
и plain str
s, но часто не получается с символами, отличными от ascii.
Нельзя смешивать unicode
и str
вместе. Вы можете либо придерживаться unicode
s:
ignorelist = (u'!', u'-', u'_', u'(', u')', u',', u'.', u':', u';', u'"', u'\'', u'?', u'#', u'@', u'$', u'^', u'&', u'*', u'+', u'=', u'{', u'}', u'[', u']', u'\\', u'|', u'<', u'>', u'/', u'—')
if not isinstance(token, unicode):
token = token.decode('utf-8') # assumes you are using UTF-8
for punc in ignorelist:
token = token.replace(punc, u' ')
или используйте только обычный str
(обратите внимание на последний):
ignorelist = ('!', '-', '_', '(', ')', ',', '.', ':', ';', '"', '\'', '?', '#', '@', '$', '^', '&', '*', '+', '=', '{', '}', '[', ']', '\\', '|', '<', '>', '/', u'—'.encode('utf-8'))
# and other parts do not need to change
Путем ручной кодировки вашего u'—'
в str
, Python не будет пытаться это сделать сам по себе.
Я предлагаю вам использовать unicode
всю свою программу, чтобы избежать подобных ошибок. Но если это будет слишком много, вы можете использовать последний метод. Однако будьте осторожны, когда вы вызываете некоторые функции в стандартной библиотеке или сторонних модулях.
# -*- coding: utf-8 -*-
сообщает Python, что ваш код написан в UTF-8 (или вы получите SyntaxError
).