Tutorial de Python - Manejo de excepciones

Jinku Hu 30 enero 2023
  1. try...except
  2. Excepción raise
  3. try...finally
  4. Excepciones incorporadas en Python
Tutorial de Python - Manejo de excepciones

En esta sección aprenderás a manejar las excepciones en Python. Además, aprenderás a plantear y capturar excepciones.

Cuando una excepción ocurre en un programa, la ejecución del programa se termina. Pero la mayoría de las veces, no prefiere la terminación anormal del programa, por lo que podría usar el manejo de excepciones en Python para evitar la caída del programa.

try...except

En el siguiente ejemplo, se pide al usuario que introduzca 10 números enteros. Si el usuario introduce otro tipo en lugar de números enteros, se lanzará una excepción y se ejecutarán las declaraciones en el bloque except:

>>> n = 10
>>> i = 1
>>> sum = 0
>>> while i <= n:
	try:
		num = int(input('Enter a number: '))
		sum = sum + num
		i = i+1
	except:
		print('Please enter an integer!!')
		break

	
Enter a number: 23
Enter a number: 12
Enter a number: Asd
Please enter an integer!!
>>> print('Sum of numbers =', sum)
Sum of numbers = 35

También puede capturar excepciones especificadas, por ejemplo, si la división por cero ocurre, puede capturar la excepción correspondiente como:

try:
    # statements
except ZeroDivisionError:
    # exception handling
except:
    # all other exceptions are handled here

Excepción raise

Puede forzar que ocurra una excepción específica usando la palabra clave raise:

>>> raise ZeroDivisionError
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    raise ZeroDivisionError
ZeroDivisionError

>>> raise ValueError
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    raise ValueError
ValueError

Si necesita añadir alguna información personalizada a la excepción auto-elevada, puede añadirla en el paréntesis después del tipo de error de la excepción.

>>> raise NameError("This is a customized exception")
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    raise NameError("This is a customized exception")
NameError: This is a customized exception

try...finally

El bloque finally es opcional en el bloque try. Si hay un bloque finally, se ejecutará en cualquier caso.

Esto se demuestra en el siguiente ejemplo:

>>> try:
		raise ValueError
finally:
		print('You are in finally block')

	
You are in finally block
Traceback (most recent call last):
  File "<pyshell#23>", line 2, in <module>
    raise ValueError
ValueError

El bloque try...finally se usa para las acciones de limpieza como cuando se trabaja con un archivo, es una buena práctica para cerrar el archivo. Así que el fichero se cerrará en el bloque finally.

Excepciones incorporadas en Python

En esta sección, aprenderás sobre las excepciones estándar en la programación en Python.

Las excepciones son los errores de tiempo de ejecución que se producen durante la interpretación. Por ejemplo, la división de cualquier número por cero creará un error de tiempo de ejecución llamado ZeroDivisionError.

En Python, hay algunas excepciones incorporadas que se describen a continuación:

Excepción ¿Cuando se levanta?
AssertionError cuando la declaración de “afirmación” es fallida
AttributeError cuando la referencia del “atributo” falla
EOFError cuando las funciones input() no leen ningún dato y se alcanza el final del archivo.
FloatingPointError cuando falla el cálculo de la coma flotante
GeneratorExit Cuando se cierra una rutina o un generador, se produce la excepción “Salida del generador”.
ImportError cuando import no puede encontrar el módulo
ModuleNotFoundError cuando el módulo no se encuentra por “importación”. Esta excepción es una subclase de ImportError.
IndexError cuando el índice de una secuencia no está en el rango.
KeyError cuando una clave de diccionario no se encuentra en el diccionario
KeyboardInterrupt cuando se pulsa una tecla de interrupción.
MemoriaError cuando hay menos cantidad de memoria para una operación especificada
NameError cuando no se encuentra una variable
NotImplementedError cuando la implementación del método de resumen es necesaria pero no se proporciona.
OsError cuando se produce un error del sistema
OverFlowError cuando un valor es demasiado grande para ser representado.
RecursionError cuando el límite de recursividad supera el número máximo
IndentaciónError cuando la indentación se especifica adecuadamente para la definición de cualquier función, clase, etc.
SystemError cuando se encuentra un error relacionado con el sistema
SystemExit cuando sys.exit() se usa para salir del intérprete.
TypeError cuando una operación no es válida para el tipo de datos especificado
ValueError cuando una función incorporada tiene argumentos válidos pero los valores proporcionados no son válidos.
RunTimeError cuando el error generado no pertenece a ninguna otra categoría
IOError cuando una operación de E/S falla.
UnBoundLocalError cuando se accede a la variable local pero no tiene ningún valor
SyntaxError cuando hay un error de sintaxis
TabError cuando hay una sangría innecesaria en la pestaña
UnicodeError cuando se encuentra un error relacionado con Unicode
UnicodeEncodeError cuando se encuentra un error relacionado con Unicode debido a la codificación
UnicodeDecodeError cuando se encuentra un error relacionado con Unicode debido a la decodificación
UnicodeTranslateError cuando se encuentra un error relacionado con Unicode debido a la traducción de
ZeroDivisionError cuando un número se divide por cero
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook