Errores y Excepciones
Error de Sintaxis
Los errores de sintaxis (SyntaxError) son violaciones de las reglas de escritura del lenguaje. El intérprete las detecta a medida que ejecuta las rutinas.
Excepción
Las excepciones son los errores detectados en tiempo de ejecución. Muchos de ellos no pueden prevenirse completamente por diseño.
Ejemplos de excepciones habituales:
Excepción | Significado |
---|---|
Exception |
error genérico (etiqueta comodín). |
IndexError |
elemento de una lista, tupla, etc. con indice indicado inexistente. |
KeyError |
clave de un diccionario inexistente. |
NameError |
variable no definida. |
ZeroDivisionError |
se dispara ante una division por cero. |
RecursionError |
recursividad infinita de las funciones, nunca se resuelve la funcion recursiva. |
TypeError |
tipo de datos incorrecto. Ejemplo: indexado con un string. |
ValueError |
valores imposibles de manejar o traducir. Ejemplo: convertir a entero una frase. |
ModuleNotFoundError |
no se encuentra el módulo requerido. |
ImportError |
no se encuentra el elemento requerido del módulo especificado. |
Ejemplos de excepciones
Sintaxis
Uso básico - Clausulas try
y except
Las excepciones pueden manejarse mediante la estructura try
- except
:
try:
#código a prueba
except:
#se detiene el código a prueba
#se ejecuta un código alternativo
Cláusula raise
Agregando la cláusula raise
al final de la rutina de excepción se puede abortar la ejecución tras mostrar el reporte de erroir predeterminado
Código condicional - Clausula else
Se puede colocar código extra pasada la parte vulnerable del programa con la cláusula else
. Este código sólo se ejecuta si la ejecución de la rutina vulnerable fue exitosa.
try:
#código a prueba
except:
#se detiene el código a prueba
#se ejecuta un código alternativo
else:
#si no ocurrió una excepción en “try”
#se ejecuta código adicional
Código de cierre - Clausula finaly
Si se requiere ejecutar un trozo de código sí o sí, el cual es independiente de la existencia o no de excepciones previas, se usa la cláusula finaly
:
try:
#código a prueba
except:
#se detiene el código a prueba
#se ejecuta un código alternativo
finally:
#código obligatorio (se ejecuta al finalizar)
Excepciones específicas
Se pueden crear fácilmente múltiples rutinas de excepciones para abordar distintos tipos de error posibles.Sólo hay que indicar el nombre de la excepción indicada justo después de la cláusula except
:
try:
#código a prueba
# division por cero
x = 4
y = 0
z = x / y
# error de indice
W = [1, 2, 3]
Z = W[4]
except ValueError:
print("Valor erróneo ")
except TypeError:
print("Tipo de datos erróneo")
except ZeroDivisionError:
print("Division por cero")
except IndexError:
print("Error de índice")
Excepciones como variable
Se puede usar el comodín Except
para guardar el tipo de excepción producida como una variable con ayuda de la cláusula as
. Esto se muestra a continuación:
try:
#código a prueba
except Exception as variable_excepcion:
print(f"Excepción producida: {variable_excepcion}")
print( type(variable_excepcion) )
Ejemplo: captando 'ZeroDivisionError'