try:
foo()
bar()
except:
pass
foo関数が例外を発生させると、次の行(bar)にスキップして実行する方法はありますか?
try:
foo()
bar()
except:
pass
foo関数が例外を発生させると、次の行(bar)にスキップして実行する方法はありますか?
はtry
ブロックのうち、bar()
してください:。
try:
foo()
except:
pass
bar()
ところで、キャッチオールexcept
条項に気をつけてください。あなたが処理/無視できることを知っている例外を選択的にキャッチすることをお勧めします。
bar
への呼び出しがtry
ブロック内にある場合は実行できません。どちらかあなたがブロック以外のtry-の外に電話を入れ、または使用する必要がelse
:同様に例外をスローする可能性があります
try:
foo()
except:
pass
else:
bar()
bar
場合、あなたはbar
のために別々のtry
ブロックを使用する必要があります。
これはtry/exceptブロックを使用するための方法ではありません。 bar()
はfoo()
が失敗した場合でも、あなたはブロックを除く/独自の試みで、それぞれを置くべきを実行する必要がある場合は、次の
try:
foo()
except:
pass # or whatever
try:
bar()
except:
pass # or whatever
あなたは両方の機能から例外が句を除いて同じで扱うことにしたい場合は、内側の試みを使用します/ finallyブロック:
try:
try:
foo()
finally:
bar()
except Exception:
print 'error'
foo()
で例外がある場合は、最初bar()
が実行され、その後、except節。
ただし、最小限のコードをtryブロック内に配置することは一般的には良い方法です。そのため、各関数の個別の例外ハンドラが最適です。
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]
例外を除いて、 'だろう除き、裸のより良い形:'、これはキャッチしないであろうとKeyboardInterruptやSystemExitのようなものです。だから、これがタイトなループで詰まっていたなら、あなたはまだ^ Cで勃発する可能性があります。 – PaulMcG