我在try代碼塊中遇到了我的代碼問題。 爲了方便,這是我的代碼:在一個塊中的多個嘗試代碼
try:
code a
code b #if b fails, it should ignore, and go to c.
code C#if c fails, go to d
code d
except:
pass
是這樣的可能嗎?
我在try代碼塊中遇到了我的代碼問題。 爲了方便,這是我的代碼:在一個塊中的多個嘗試代碼
try:
code a
code b #if b fails, it should ignore, and go to c.
code C#if c fails, go to d
code d
except:
pass
是這樣的可能嗎?
你必須讓這個單獨try
塊:
try:
code a
except ExplicitException:
pass
try:
code b
except ExplicitException:
try:
code c
except ExplicitException:
try:
code d
except ExplicitException:
pass
這是假定你想運行code c
只有如果code b
失敗。
如果你需要運行code c
無論,你需要把對方後try
塊一個:
try:
code a
except ExplicitException:
pass
try:
code b
except ExplicitException:
pass
try:
code c
except ExplicitException:
pass
try:
code d
except ExplicitException:
pass
我使用except ExplicitException
在這裏,因爲它是從未一個很好的做法,一味忽略所有例外。您會忽略MemoryError
,KeyboardInterrupt
和SystemExit
,否則,您通常不會忽略或攔截,而沒有某種重新提升或有意識的理由來處理這些問題。
提取(重構)您的語句。並使用and
和or
的魔法來決定何時短路。
def a():
try: # a code
except: pass # or raise
else: return True
def b():
try: # b code
except: pass # or raise
else: return True
def c():
try: # c code
except: pass # or raise
else: return True
def d():
try: # d code
except: pass # or raise
else: return True
def main():
try:
a() and b() or c() or d()
except:
pass
如果你不想鏈(一個巨大的數字)嘗試 - 除了條款,您可以嘗試在一個循環的代碼,並在第一次成功突破。直接在當前範圍
for code in (
lambda: a/b,
lambda: a/(b + 1),
lambda: a/(b + 2),
):
try: print(code())
except Exception as ev: continue
break
else:
print("it failed: %s" % ev)
例任意代碼(報表):
for i in 2, 1, 0:
try:
if i == 2: print(a/b)
elif i == 1: print(a/(b + 1))
elif i == 0: print(a/(b + 2))
break
except Exception as ev:
if i:
continue
print("it failed: %s" % ev)
要明確,你想'代碼C'與代碼
例子可以投入功能僅當代碼b引發異常時才執行*? –
所有代碼應該在一個try塊中運行,即使它們引發異常。 – arvidurs
你不能那樣做。一個'try'模塊不能抑制執行的所有代碼中的異常。當它發生時,它會讓你捕捉異常,但塊的其餘部分永遠不會被執行。 –