例外をunicodeで
ソースコードをUTF-8で書いていると、pythonのスタックトレース(stack trace)画面がおかしい。環境は Windows 2000、Python 2.5。
# -*- coding: utf-8 -*- raise IndexError, 'いきなりエラー'
というコードを実行すると、
Traceback (most recent call last):
File "C:\test.py", line 2, in
raise IndexError, '縺・″縺ェ繧翫お繝ゥ繝シ'
IndexError: 縺・″縺ェ繧翫お繝ゥ繝シ
コード行(最後から2行目)と例外行(最終行)の両方が化ける。
# -*- coding: utf-8 -*- raise IndexError, u'いきなりエラー'
メッセージの文字列に u を付け加えると、
Traceback (most recent call last):
File "C:\test.py", line 2, in
raise IndexError, u'縺・″縺ェ繧翫お繝ゥ繝シ'
IndexError
最後の例外行が途中から表示されない。
# -*- coding: utf-8 -*- raise IndexError, u'いきなりエラー'.encode('shift_jis')
しょうがないので、わざわざ変換してやると、
Traceback (most recent call last):
File "C:\test.py", line 2, in
raise IndexError, u'縺・″縺ェ繧翫お繝ゥ繝シ'.encode('shift_jis')
IndexError: いきなりエラー
ちゃんと表示されますね。あきらめて英語で書くか。