У меня проблема с моим кодом в блоке 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
Если вы не хотите цепочки (огромное количество) предложений try-except, вы можете попробовать свои коды в цикле и прервать 1-й успех.
Пример с кодами, которые можно ввести в функции:
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)