2007-10-11

Pythonの例外ではまる

呼出の親側で

try:
obj.call()
except:
pass

とやってて、呼び出されたobjのメソッドで次のようなコードを書いていた。


from ftplib import FTP

...

try:
ftp.storbinary()
except ftplib.error_perm:
pass

特定の状況でのエラーは無視できたので、例外をつかまえて無視したつもりだった。

だがしかし、上のコードはerror_permをキャッチできず呼出側のexcept句まで飛んでしまうのであった。なぜだろうか。

サブモジュールの行頭のimport句が重要。FTPしかimportしてないので、error_permをキャッチするコードのところで
TypeErrorが発生していたのだ。

でもって、呼出側の無指定exceptでキャッチされる、と。

教訓:面倒でも無指定exceptは使わないこと


しかし、プログラムミスも例外としてキャッチされてしまうとは予想しなかった。
予想もしないありとあらゆるものをキャッチするようだ。

0 件のコメント: