Windows版 Python 2.7.6 で ez_setup.py が UnicodeDecodeErrorになる件
Windows で easy_install を入れたくってez_setup.py を実行するけれども、UnicodeDecodeError が発生してうまく行きません。おかしいな、前入れた時はそんなことなかったのに。
問題の例外は mimetypes.py で発生しています。
- C:/Python27/lib/mimetypes.py
・ ・ def read_windows_registry(self, strict=True): """ Load the MIME types database from Windows registry. If strict is true, information will be added to list of standard types, else to the list of non-standard types. """ # Windows only if not _winreg: return def enum_types(mimedb): i = 0 while True: try: ctype = _winreg.EnumKey(mimedb, i) except EnvironmentError: break try: ★ ctype = ctype.encode(default_encoding) # omit in 3.x! except UnicodeEncodeError: pass else: yield ctype i += 1 default_encoding = sys.getdefaultencoding() with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr: for subkeyname in enum_types(hkcr): try: ・ ・
★で UnicodeDecodeErrorが発生。
どうやらレジストリの HKEY_CLASSES_ROOT の下のサブキーを舐める処理っぽい。なんかよくないキー名でもいるのかな?・・・と regedit で開いてみるも、キーが多すぎて探すのに挫折...orz
問題のコードをちょっと拝借して以下の様なスクリプトを走らせます
- debug.py
import sys import _winreg default_encoding = sys.getdefaultencoding() def enum_types(mimedb): i = 0 while True: try: ctype = _winreg.EnumKey(mimedb, i) except EnvironmentError: break try: ctype = ctype.encode(default_encoding) # omit in 3.x! except UnicodeEncodeError: pass except UnicodeDecodeError: # added! print ctype # for Research Error Factor else: yield ctype i += 1 with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr: for subkeyname in enum_types(hkcr): pass
実行結果
C:\bin>python debug.py ComicStudio Web投稿ファイル ComicStudio コンビニ出力ファイル ComicStudio トーンファイル ComicStudio ページファイル ComicStudio 作品ファイル
あー、、、、ComicStudio ですか...orz
どうしたもんかな、と思ったのですが、UnicodeEncodeError が発生したサブキーは 無造作に捨てているので UnicodeDecodeErrorの方もexcept して ポイ捨て するように修正して実行しました。
まぁうまく行ったのでよしとしますが、これはやっぱりバグなのかしらね。