7

コードをプロファイリングすると、
C:\ Python26 \ lib \ encodings \ utf_8.py:15(decode)への何百万もの呼び出しを見つけて驚いた。

デバッグを開始したところ、コードベース全体に多くの小さなバグがあり、通常は文字列をUnicodeと比較したり、stingとunicodeを追加したりしていることがわかりました。Pythonは文字列を丁寧にデコードし、Unicodeで次の操作を実行します。

どのような種類。しかし、高価です!

JoelSpolskyDiveIntoPythonを読んだことがあるので、Unicodeに堪能です...

私はコードの内部をユニコードのみに保つようにしています。

私の質問-このpythonicナイスガイの動作をオフにできますか?少なくとも、これらすべてのバグを見つけて修正するまで(通常はu'u'を追加して)?

それらのいくつかは見つけるのが非常に難しいです(時々文字列である変数...)。

Python 2.6.5(そして私は3.xに切り替えることができません)。

4

1 に答える 1

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

reload(sys)sys.setdefaultencoding上記のスニペットでは、通常はsitecustomize.pyPythonディレクトリ内のファイルに格納されることになっているため、ここでのみ必要ですsite-packages(これを行うことをお勧めします)。

于 2010-05-17T18:13:18.227 に答える