Lazar o Generar excepciones en Python

Python genera una excepción cada vez que intenta ejecutar código no válido. En Manejo de excepciones en Python, habla sobre cómo manejar las excepciones de Python con declaraciones de try y except para que su programa pueda recuperarse de las excepciones que anticipó. Pero también puede generar sus propias excepciones en su código. Generar una excepción es una forma de decir: «Deje de ejecutar el código en esta función y mueva la ejecución del programa a la declaración except«.

Las excepciones se generan con una declaración raise. En el código, una declaración de raise consta de lo siguiente:

  • La palabra clave raise
  • Una llamada a la función Exception()
  • Una cadena con un útil mensaje de error pasado a la función Exception()

Por ejemplo, ingrese lo siguiente en el shell interactivo:

>>> raise Exception('This is the error message.')
Traceback (most recent call last):
  File "<pyshell#191>", line 1, in <module>
    raise Exception('This is the error message.')
Exception: This is the error message.

Si no hay sentencias try y except que cubran la sentencia raise que ha provocado la excepción, el programa simplemente se bloquea y muestra el mensaje de error de la excepción.

A menudo es el código que llama a la función, en lugar de la propia función, el que sabe cómo manejar una excepción. Esto significa que comúnmente verás una sentencia raise dentro de una función y las sentencias try y except en el código que llama a la función. Por ejemplo, abre una nueva pestaña del editor de archivos, introduce el siguiente código y guarda el programa como boxPrint.py:

def boxPrint(symbol, width, height):
    if len(symbol) != 1:
      ➊ raise Exception('Symbol must be a single character string.')
    if width <= 2:
      ➋ raise Exception('Width must be greater than 2.')
    if height <= 2:
      ➌ raise Exception('Height must be greater than 2.')

    print(symbol * width)
    for i in range(height - 2):
        print(symbol + (' ' * (width - 2)) + symbol)
    print(symbol * width)

for sym, w, h in (('*', 4, 4), ('O', 20, 5), ('x', 1, 3), ('ZZ', 3, 3)):
    try:
        boxPrint(sym, w, h)
  ➍ except Exception as err:
      ➎ print('An exception happened: ' + str(err))

Puedes ver la ejecución de este programa en https://autbor.com/boxprint. Aquí hemos definido una función boxPrint() que toma un carácter, un ancho y un alto, y utiliza el carácter para hacer una pequeña imagen de una caja con ese ancho y alto. Esta forma de caja se imprime en la pantalla.

Digamos que queremos que el carácter sea un solo carácter, y que el ancho y el alto sean mayores que 2. Añadimos sentencias if para lanzar excepciones si estos requisitos no se cumplen. Más tarde, cuando llamemos a boxPrint() con varios argumentos, nuestro try/except manejará los argumentos inválidos.

Este programa utiliza except Exception as err como forma de la sentencia except ➍. Si se devuelve un objeto Exception de boxPrint() ➊ ➋ ➌, esta sentencia except lo almacenará en una variable llamada err. Luego podemos convertir el objeto Exception en una cadena pasándolo a str() para producir un mensaje de error ➎ fácil de usar. Cuando ejecute este boxPrint.py, la salida se verá así:

****
*  *
*  *
****
OOOOOOOOOOOOOOOOOOOO
O                  O
O                  O
O                  O
OOOOOOOOOOOOOOOOOOOO
An exception happened: Width must be greater than 2.
An exception happened: Symbol must be a single character string.

Usando las declaraciones try y except , puede manejar los errores con más gracia en lugar de dejar que todo el programa se bloquee.

Deja una respuesta