あまり見かけない例外
以下のコードを windows の python 2.5 で実行すると、
def foo(): try: print 2 break finally: print 3 print 4 if __name__ == '__main__': print 1 foo() print 5
こうなる。
1 2 3 Traceback (most recent call last): File "C:\test.py", line 11, infoo() SystemError: error return without exception set
SystemErrorはあまり聞いたことがない。「例外がセットされずにエラーが返った」という説明を読んでもピンと来ない。というか、そもそもtry ~ finallyの中でbreakは使用できるのかという疑問が頭を過ぎる。
マニュアルを引くと少しだけ記述がある。
try...finally 文の try スイート内で return、 break、または continue 文が実行された場合、finally 節も `抜け出る途中に (on the way out)' 実行されます。
http://www.python.jp/doc/2.4/ref/try.html
うむ当たり前だな。そもそもbreakって何をするものだったっけ?これもマニュアルにある。
break 文は、文を囲う最も内側のループを終了させ、ループにオプションの else 節がある場合には else 節に飛びます。
http://www.python.jp/doc/2.4/ref/break.html
なるほど。さらに引用。
break が finally 節を伴う try 文の外側に処理を渡す際には、ループを実際に抜ける前にそのfinally 節が実行されます。
そうか、よく分かった。で、何でSystemErrorが発生したんだ?