#!/usr/bin/python
import logging
def raiser():
try:
1/0.0
except:
logging.exception('my except:')
raise
try:
raiser()
except Exception, why:
print 'printing', why
print 'printing', why.__class__
実行結果
[nori@Asama]/usr/lib64/python2.4% python ~/Desktop/work/test/loggingexception.py
ERROR:root:my except:
Traceback (most recent call last):
File "/home/nori/Desktop/work/test/loggingexception.py", line 6, in raiser
1/0.0
ZeroDivisionError: float division
printing float division
printing exceptions.ZeroDivisionError
[nori@Asama]/usr/lib64/python2.4% fg
「式を伴わない場合、raise は現在のスコープで最終的に有効になっている式を再送出します。そのような式が現在のスコープに全くない場合、エラーを示す例外が送出されます。」とあり、「最終的に有効になっている式」ってピンとこなかったけど発生したexceptionらしい。
蛇足:
「try 文には二つの形式: try...except および try...finally があります。これら二つの形式を混合することはできません (互いにネストすることはできます)。」とtry文の説明にありますが、python2.5ではできます。悪い機能じゃないけど、これだけが理由で2.5以前のpythonで動かなくなるのはアホ過ぎる。ネストすればいいだけだし、2.4以前を使っているディストリはそれなりにあるからだ。
参照:
6.9 raise 文 @ Python リファレンスマニュアル
7.4 try 文 @ Python リファレンスマニュアル
2.4 組み込み例外 @ Python ライブラリリファレンス
1 件のコメント:
google codeで発見した
類似コード
コメントを投稿