write tutorial read python exception-handling

tutorial - Excepción al pasar en Python



read fasta python (2)

Tengo un poco de código que hace un manejo de excepción funcional y todo funciona bien, las excepciones se generan cuando quiero que lo sean, pero cuando estoy depurando, los trazos de línea no siempre hacen lo que yo quiero.

Ejemplo A:

>>> 3/0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero

Ejemplo B:

>>> try: 3/0 ... except Exception as e: raise e ... Traceback (most recent call last): File "<stdin>", line 2, in <module> ZeroDivisionError: integer division or modulo by zero

En ambos ejemplos, la excepción realmente ocurre en la línea 1, donde intentamos hacer 3/0, pero en el último ejemplo, se nos dice que ocurrió en la línea 2, donde se genera.

¿Hay alguna manera en Python para generar una excepción, como si fuera otra excepción, algo que produciría el siguiente resultado:

>>> try: 3/0 ... except Exception as e: metaraise(e) ... Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero


Como referencia, la solución es aproximadamente la siguiente:

def getException(): return sys.exc_info() def metaraise(exc_info): raise exc_info[0], exc_info[1], exc_info[2] try: 3/0 except: e = getException() metaraise(e)

Lo mejor de esto es que puedes pasar la variable e y metaraizarla en otro lugar, incluso si se han encontrado otras excepciones en el camino.


Cuando vuelves a plantear una excepción que capturaste, como

except Exception as e: raise e

restablece el seguimiento de la pila. Es como volver a plantear una nueva excepción. Lo que quieres es esto:

except Exception as e: raise