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