Python provee un conjunto de excepciones por defecto que podemos hace uso en nuestros programas.
Algunas de las excepciones más comunes que podemos utilizar son:
ValueError: Se genera cuando una operación o función recibe un argumento que tiene un valor inapropiado como vimos en el concepto anterior al tratar de convertir un string a entero siendo que el string no contiene valores numéricos.
IndexError: Se genera cuando un subíndice de una secuencia (tupla, lista, string) está fuera de rango. Por ejemplo en una lista de 5 elementos queremos acceder al elemento con subíndice 70.

NameError: Se genera cuando llamamos a una función, método o tratamos de acceder a una variable inexistente.

TypeError: Se genera cuando una operación o función se aplica a un tipo de dato inapropiado. Por ejemplo si queremos sumar un entero y un string:

ModuleNotFoundError: Se genera cuando la declaración de un import tiene problemas al intentar cargar el módulo inexistente :

ZeroDivisionError: Se genera cuando intentamos dividir una variable o valor por cero:

OverflowError: Se genera cuando un resultado de una operación aritmética con valores reales (no enteros) es demasiado grande para ser representado:

KeyError: Se genera cuando no se encuentra una clave en un diccionario:

Un listado completo de las excepciones estándar de Python las puede consultar aquí.
Realizar la carga de dos números por teclado e imprimir la división del primero respecto al segundo, capturar la excepción ZeroDivisionError.
try:
valor1=int(input("Ingrese dividendo:"))
valor2=int(input("Ingrese divisor:"))
division=valor1/valor2
print("El resultado de la división es", division)
except ZeroDivisionError:
print("No se puede dividir por cero.")
Almacenar en una tupla los nombres de meses del año. Solicitar el ingreso del número de mes y mostrar seguidamente el nombre de dicho mes. Capturar la excepción IndexError.
meses=("enero","febrero","marzo","abril","mayo","junio",
"julio","agosto","septiembre","octubre","noviembre","diciembre")
try:
nromes=int(input("Ingrese un número de mes [1-12]:"))
print(meses[nromes-1])
except IndexError:
print("En número de mes debe ir entre 1 y 12")
Con este algoritmo si el operador ingresa un valor superior a 12 luego se captura la excepción IndexError. Pero tenemos el problema si carga un valor 0 o inferior a 0 luego las tuplas pueden disponer valores negativos, por lo que estos casos lo podemos resolver con un if:
meses=("enero","febrero","marzo","abril","mayo","junio",
"julio","agosto","septiembre","octubre","noviembre","diciembre")
try:
nromes=int(input("Ingrese un número de mes [1-12]:"))
if nromes>0:
print(meses[nromes-1])
else:
print("En número de mes debe ir entre 1 y 12")
except IndexError:
print("En número de mes debe ir entre 1 y 12")
En un algoritmo se pueden presentar múltiples tipos de excepciones. Veamos la sintaxis para su captura con un ejemplo.
Realizar la carga de dos números por teclado e imprimir la división del primero respecto al segundo, capturar las excepciones ZeroDivisionError y ValueError.
try:
valor1=int(input("Ingrese dividendo:"))
valor2=int(input("Ingrese divisor:"))
division=valor1/valor2
print("El resultado de la división es", division)
except ZeroDivisionError:
print("No se puede dividir por cero.")
except ValueError:
print("Los valores a ingresar deben ser enteros")
Debemos disponer los dos bloques 'except' a la misma altura indicando el nombre de la excepción a capturar:
except ZeroDivisionError:
print("No se puede dividir por cero.")
except ValueError:
print("Los valores a ingresar deben ser enteros")
En algunas situaciones podemos disponer un bloque try/except sin especificar el o los nombres de las excepciones a capturar.
Realizar la carga de dos números por teclado e imprimir la división del primero respecto al segundo. Capturar cualquier tipo de excepción que se dispare.
try:
valor1=int(input("Ingrese dividendo:"))
valor2=int(input("Ingrese divisor:"))
division=valor1/valor2
print("El resultado de la división es", division)
except:
print("Problemas con la entrada u operación")
Como podemos ver no disponemos un nombre de excepción después de la palabra clave 'except':
except:
print("Problemas con la entrada u operación")
Nuestro algoritmo que responde a cualquier excepción que se dispara siempre será muy general ya que no analizamos en particular que excepción se generó.