2011-12-20 9 views
13

なぜfooの例外は気付かれませんが、barの例外は発生しますか?python try-finally

def foo(): 
    try: 
     raise Exception('foo') 
    finally: 
     return 

def bar(): 
    try: 
     raise Exception('bar') 
    finally: 
     pass 

foo() 
bar() 
+5

[戻り値は例外です](http://stackoverflow.com/questions/517060/return-eats-exception) – gecco

答えて

19

Python documentationから:

finally節は別の例外を発生させたり、リターンまたはブレーク文を実行した場合、保存された例外が失われます。

+1

興味深い!その質問が理にかなっていればどこに行くのですか? – wim

+5

@wim:関数の終わりにローカル変数が行くところはどこにでもあります。これを見る一つの方法は、finallyブロックの最後で例外が再発生することです。 'return'は' finally'ブロックの残りの部分をスキップするので、例外を再発生させることは決してありません。 – interjay