При профилировании нашего кода я был удивлен найти миллионы вызовов к
C:\Python26\lib\encodings\utf_8.py:15 (декодируют)
Я начал отлаживать и нашел, что через нашу кодовую базу существует много небольших ошибок, обычно сравнивая строку с unicode или добавляя жало и unicode. Python любезно декодирует строки и выполняет следующие операции в unicode.
Как добрый. Но дорогой!
Я бегло говорю на unicode, считав Joel Spolsky и Погружение В Python...
Я пытаюсь сохранить наши внутренности кода в unicode только.
Мой вопрос - я могу выключить это pythonic поведение хорошего парня? По крайней мере, пока я не нахожу все эти ошибки и фиксирую их (обычно путем добавления u'u')?
Некоторых из них чрезвычайно трудно найти (переменная, которая иногда является строкой...).
Python 2.6.5 (и я не могу переключиться на 3.x).
Следующее должно работать:
>>> 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
(желательно это сделать).