你想,如果有任何的doSomething1
,doSomething2
和doSomething3
方法的失敗,則try
塊被跳過,並且運行doSomething4
方法。
那麼,這在邏輯上是不可能的。如果doSomething1
失敗,則它已執行,因此整個try
不能完全跳過。 doSomething2
相同:如果失敗,則已運行,並且doSomething1
未失敗,因此只能跳過doSomething3
。
以下是您可以實施的幾種不同行爲。
行爲1
try:
doSomething1()
doSomething2()
doSomething3()
except:
doSomething4()
嘗試運行doSomething1
,doSomething2
和doSomething3
。如果其中一個失敗,則跳過以下幾項,並執行doSomething4
。否則,跳過doSomething4
。
行爲2
try:
doSomething1()
doSomething2()
doSomething3()
finally:
doSomething4()
嘗試運行doSomething1
,doSomething2
和doSomething3
。如果其中一個失敗,則跳過以下幾個。無論如何,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
,doSomething2
和doSomething3
失敗,doSomething4
一個運行。這種行爲可以通過更簡單的方式用更簡單的異常管理來實現,但此代碼的優點是僅使用try
s,except
s和else
s。
行爲4
這是對應於你的問題的標題。如果doSomething1
,doSomething2
和doSomething3
均未失敗,則運行doSomething4
;否則,它不會運行。
如果您在數據庫上工作,您不能使用事務並回滾出錯嗎? – Lucero
是的,這聽起來像你需要交易行爲。您應該使用數據庫驅動程序中提供的工具來執行此操作,而不是使用天真的Python錯誤處理。 – jonrsharpe
Python無法及時回溯。一旦完成,它不能自動撤消。 – Barmar