Issue 2517: Error when printing an exception containing a Unicode string

この先が気になって調べてみた。

Issue 2517: Error when printing an exception containing a Unicode string

この問題は

  1. デフォルトのエンコーディングが ascii となっている件
    →デフォルトのエンコーディングが「何のための」エンコーディングのデフォルトなのかが曖昧である点
  2. Exception type が __unicode__() を実装していない件

などが関係していると思うんだけど、

2. については Python 2.6 では一応解消している。

Python 2.6.2 (r262:71600, Jun  4 2009, 14:03:50) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> e = Exception(u"テス子")
>>> e
Exception(u'\u30c6\u30b9\u5b50',)
>>> str(e)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
>>> unicode(e)
u'\u30c6\u30b9\u5b50'
Python 2.5.4 (r254:67916, Jun  4 2009, 14:03:24) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> e = Exception(u"テス子")
>>> e
Exception(u'\u30c6\u30b9\u5b50',)
>>> str(e)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
>>> unicode(e)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)