2011-10-31 5 views

答えて

8

tryブロックのうち、bar()してください:。

try: 
    foo() 
except: 
    pass 
bar() 

ところで、キャッチオールexcept条項に気をつけてください。あなたが処理/無視できることを知っている例外を選択的にキャッチすることをお勧めします。

+2

例外を除いて、 'だろう除き、裸のより良い形:'、これはキャッチしないであろうとKeyboardInterruptやSystemExitのようなものです。だから、これがタイトなループで詰まっていたなら、あなたはまだ^ Cで勃発する可能性があります。 – PaulMcG

5

barへの呼び出しがtryブロック内にある場合は実行できません。どちらかあなたがブロック以外のtry-の外に電話を入れ、または使用する必要がelse:同様に例外をスローする可能性があります

try: 
    foo() 
except: 
    pass 
else: 
    bar() 

bar場合、あなたはbarのために別々のtryブロックを使用する必要があります。

2

これはtry/exceptブロックを使用するための方法ではありません。 bar()foo()が失敗した場合でも、あなたはブロックを除く/独自の試みで、それぞれを置くべきを実行する必要がある場合は、次の

try: 
    foo() 
except: 
    pass # or whatever 

try: 
    bar() 
except: 
    pass # or whatever 
0

あなたは両方の機能から例外が句を除いて同じで扱うことにしたい場合は、内側の試みを使用します/ finallyブロック:

try: 
    try: 
     foo() 
    finally: 
     bar() 
except Exception: 
    print 'error' 

foo()で例外がある場合は、最初bar()が実行され、その後、except節。

ただし、最小限のコードをtryブロック内に配置することは一般的には良い方法です。そのため、各関数の個別の例外ハンドラが最適です。

0

foo()bar()の2つの関数しかない場合は、他の解決策を確認してください。あなたが行のLOTを実行する必要がある場合は、この例のようなものを試してください:

def foo(): 
    raise Exception('foo_message') 
def bar(): 
    print'bar is ok' 
def foobar(): 
    raise Exception('foobar_message') 

functions_to_run = [ 
    foo, 
    bar, 
    foobar, 
] 

for f in functions_to_run: 
    try: 
     f() 
    except Exception as e: 
     print '[Warning] in [{}]: [{}]'.format(f.__name__,e) 

結果:

[Warning] in [foo]: [foo_message] 
bar is ok 
[Warning] in [foobar]: [foobar_message]