あなたがdoSomething1
、doSomething2
とdoSomething3
方法のいずれかが失敗した場合、その後、try
ブロックはスキップされ、doSomething4
メソッドが実行されることを望みます。
これは論理的に可能ではありません。 doSomething1
が失敗した場合、実行されたため、try
全体を完全にスキップすることはできません。 doSomething2
と同じです:失敗した場合は実行されており、doSomething1
は失敗していないので、まだdoSomething3
しかスキップできません。
ここでは、実装できるいくつかの異なる動作を示します。 doSomething1
、doSomething2
とdoSomething3
を実行しようと
行動1
try:
doSomething1()
doSomething2()
doSomething3()
except:
doSomething4()
。いずれかが失敗した場合、次のものはスキップされ、
doSomething4
が実行されます。それ以外の場合、
doSomething4
はスキップされます。
doSomething1
、
doSomething2
と
doSomething3
を実行しようと
行動2
try:
doSomething1()
doSomething2()
doSomething3()
finally:
doSomething4()
。そのうちの1つが失敗すると、次のものはスキップされます。どちらの場合も、最後に
doSomething4
が実行されます。
行動3
try:
doSomething1()
except:
try:
doSomething2()
except:
pass
else:
try:
doSomething3()
except:
pass
else:
doSomething4()
else:
try:
doSomething2()
except:
try:
doSomething3()
except:
pass
else:
doSomething4()
else:
try:
doSomething3()
except:
doSomething4()
正確doSomething1
の1、doSomething2
とdoSomething3
が失敗した場合、doSomething4
が実行されます。この振る舞いは、より簡単な例外管理ではるかに簡単な方法で実装できますが、このコードはtry
、except
およびelse
を使用するメリットがあります。
行動4
これは、あなたの質問のタイトルに対応するものです。 doSomething1
,doSomething2
およびdoSomething3
のいずれも失敗した場合は、doSomething4
が実行されます。それ以外の場合は実行されません。
データベースで作業している場合、トランザクションとロールバックエラーを使用できません。 – Lucero
はい、トランザクション動作が必要なようです。純粋なPythonエラー処理ではなく、データベースドライバで使用可能なツールを使用してこれを行う必要があります。 – jonrsharpe
Pythonは時間通りに戻ることはできません。何かが完了すると、自動的に元に戻すことはできません。 – Barmar