Múltiples códigos de prueba en un bloque

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?

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 una razón consciente para manejarlos.

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 

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 

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 scope 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)