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 |
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