pythonの例外キャッチ

pythonの例外キャッチ。

会社のRed Hatのpythonバージョンが2.6だ。
python2.6は例外クラスからメッセージを取得するとき、
messageを参照するとWarningが出力される。

python2.6

1
2
3
4
>>> e = Exception('Hello, Exception!')
>>> e.message
__main__:1: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
'Hello, Exception!'

python2.7

1
2
3
>>> e = Exception('Hello, Exception!')
>>> e.message
'Hello, Exception!'

python3.6

1
2
3
4
5
>>> e = Exception('Hello, Exception!')
>>> e.message
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Exception' object has no attribute 'message'

対処

python2.6ではmessageを呼び出すと廃止予定が表示される。
python2.7ではmessageを呼び出した際の廃止予定が表示されなくなった(表示したいときはpythonの引数に-Wdや-W errorを指定する)。
python3.6ではmessageは廃止された。

例外の中身はmessageから取得せずに、単純に__str__で取得すれば良いようだ。

1
2
3
4
5
>>> e = Exception('Hello, Exception!')
>>> print(str(e))
Hello, Exception!
>>> print('catch:[{0}]'.format(e))
catch:[Hello, Exception!]

この方法だと、python2.6, 2.7, 3.6で問題なく実行できる。
formatで出力するようにすれば、付随情報もついでに出力して、エラーを解析しやすいよな気がする。

同じタグの記事
同じカテゴリの記事