pass - python try except print error
Múltiples códigos de prueba en un bloque (4)
Tengo un problema con mi código en el bloque try. Para hacerlo más fácil este es mi código:
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
¿Es algo como esto posible?
Extrae (refactoriza) tus declaraciones. Y use la magia de and
or
y para decidir cuándo cortocircuitar.
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
Puedes usar el módulo fuckit .
Envuelve tu código en una función con el decorador @fuckit
:
@fuckit
def func():
code a
code b #if b fails, it should ignore, and go to c.
code c #if c fails, go to d
code d
Si no desea encadenar (un gran número de) cláusulas de prueba-excepción, puede probar sus códigos en un bucle y romper el primer éxito.
Ejemplo con códigos que se pueden poner en funciones:
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)
Ejemplo con códigos arbitrarios (declaraciones) directamente en el alcance actual:
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)
Tendrás que hacer estos bloques de try
separados :
try:
code a
except ExplicitException:
pass
try:
code b
except ExplicitException:
try:
code c
except ExplicitException:
try:
code d
except ExplicitException:
pass
Esto supone que desea ejecutar el code c
solo si el code b
falló.
Si necesita ejecutar el code c
independientemente , debe poner los bloques try
uno tras otro:
try:
code a
except ExplicitException:
pass
try:
code b
except ExplicitException:
pass
try:
code c
except ExplicitException:
pass
try:
code d
except ExplicitException:
pass
Estoy usando except ExplicitException
aquí porque nunca es una buena práctica ignorar ciegamente todas las excepciones. De lo MemoryError
, MemoryError
, KeyboardInterrupt
y SystemExit
, que normalmente no desea ignorar o interceptar sin algún tipo de re-aumento o razón consciente para manejarlos.