我可以关闭隐式Python unicode转换来查找我的混合字符串错误吗?

Tal*_*iss 7 python debugging unicode decoding

在分析我们的代码时,我惊讶地发现数百万次调用
C:\ Python26\lib\encodings\utf_8.py:15(解码)

我开始调试,发现在我们的代码库中存在许多小错误,通常将字符串与unicode进行比较或添加sting和unicode.Python慷慨地解码字符串并在unicode中执行以下操作.

多么体贴.但是很贵!

我精通unicode,读过Joel SpolskyDive Into Python ......

我尝试将代码内部仅保留在unicode中.

我的问题 - 我可以关闭这个pythonic好人行为吗?至少在我发现所有这些错误并修复它们之前(通常通过添加一个u'u')?

其中一些非常难找(一个变量有时是一个字符串......).

Python 2.6.5(我不能切换到3.x).

Chr*_*heD 10

以下应该有效:

>>> 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
Run Code Online (Sandbox Code Playgroud)

reload(sys)在上面的代码片段中只需要这里,因为通常sys.setdefaultencoding应该sitecustomize.py放在Python site-packages目录中的文件中(建议这样做).

  • 在我的Apple Python 2.6版本中(但我在其他地方已经看到了......)`site.py`(在你的std python lib目录中;在Python启动时自动执行一次)包含(接近结束):`if hasattr(sys) ,"setdefaultencoding"):del sys.setdefaultencoding`.这使得`sys`上的这个属性不可用,除非你明确地选择`reload(sys)`(或取消注释删除).它曾经在早期的Pythons iirc中直接提供. (2认同)