Python | Elevar una excepción a otra excepción

Consideremos una situación en la que queremos generar una excepción en respuesta a la captura de una excepción diferente, pero queremos incluir información sobre ambas excepciones en el rastreo.

Para enstringr excepciones, utilice la instrucción raise from en lugar de una simple instrucción raise. Esto le dará información sobre ambos errores.

Código #1:

def example():
    try:
        int('N/A')
    except ValueError as e:
        raise RuntimeError('A parsing error occurred') from e...
  
example()

Producción :

Traceback (most recent call last):
  File "", line 3, in example
ValueError: invalid literal for int() with base 10: 'N/A'

Esta excepción es la causa directa de la siguiente excepción:

Traceback (most recent call last):
  File "", line 1, in 
  File "", line 5, in example
RuntimeError: A parsing error occurred

Ambas excepciones se capturan en el rastreo. Se utiliza una declaración de excepción normal para detectar una excepción de este tipo. Sin embargo, __cause__se puede buscar que el atributo del objeto de excepción siga la string de excepción como se explica en el código que se proporciona a continuación.

Código #2:

try:
    example()
except RuntimeError as e:
    print("It didn't work:", e)
    if e.__cause__:
        print('Cause:', e.__cause__)

Una forma implícita de excepciones enstringdas ocurre cuando se genera otra excepción dentro de un bloque excepto.

Código #3:

def example2():
    try:
        int('N/A')
    except ValueError as e:
        print("Couldn't parse:", err)
  
example2()
Traceback (most recent call last):
    File "", line 3, in example2
ValueError: invalid literal for int() with base 10: 'N / A'

Durante el manejo de la excepción anterior, ocurrió otra excepción:

Traceback (most recent call last):
    File "", line 1, in 
    File "", line 5, in example2
NameError: global name 'err' is not defined

En el siguiente código, la excepción NameError se genera como resultado de un error de programación, no como respuesta directa al error de análisis. Para este caso, __cause__no se establece el atributo de una excepción. En su lugar, se establece un __context__atributo en la excepción anterior.

Código #4: Para suprimir el enstringmiento, use aumentar desde Ninguno

def example3():
    try:
        int('N / A')
    except ValueError:
        raise RuntimeError('A parsing error occurred') from None...
  
example3()

Producción :

Traceback (most recent call last):
    File "", line 1, in 
    File "", line 5, in example3
RuntimeError: A parsing error occurred

Publicación traducida automáticamente

Artículo escrito por manikachandna97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *