Могу ли я отключить неявные преобразования Unicode в Python, чтобы найти ошибки в смешанных строках? - PullRequest
7 голосов
/ 17 мая 2010

При профилировании нашего кода я с удивлением обнаружил миллионы звонков на
C: \ Python26 \ Lib \ кодировки \ utf_8.py: 15 (декодирование)

Я начал отладку и обнаружил, что в нашей базе кода много мелких ошибок, обычно сравнивающих строку с юникодом или добавляющих строку и юникод. Python любезно декодирует строки и выполняет следующие операции в юникоде.

Как мило. Но дорого!

Я свободно владею юникодом, прочитав Джоэл Спольски и Dive Into Python ...

Я стараюсь хранить наши внутренние компоненты кода только в юникоде.

Мой вопрос - могу ли я отключить это питоническое поведение хорошего парня? По крайней мере, пока я не найду все эти ошибки и не исправлю их (как правило, добавив u'u ')?

Некоторые из них чрезвычайно трудно найти (переменная, которая иногда является строкой ...).

Python 2.6.5 (и я не могу переключиться на 3.x).

1 Ответ

10 голосов
/ 17 мая 2010

Должно работать следующее:

>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('undefined')
>>> u"abc" + u"xyz"
u'abcxyz'
>>> u"abc" + "xyz"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/undefined.py", line 22, in decode
    raise UnicodeError("undefined encoding")
UnicodeError: undefined encoding

reload(sys) в приведенном выше фрагменте кода необходим только здесь, поскольку обычно sys.setdefaultencoding должен находиться в файле sitecustomize.py в вашем каталоге Python site-packages (желательно это сделать).

...