try print pass exceptions example error custom catch all python exception exception-handling try-catch except

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.