Manejo de excepciones de Python Uso de la instrucción try, except y finalmente
Manejo de excepciones de Python usando la declaración try, except y finalmente
En este tutorial, aprenderá cómo manejar las excepciones en su programa de Python utilizando las declaraciones try, except y finalmente con la ayuda de ejemplos.
Video:Manejo de excepciones de Python (pruebe... excepto... finalmente)
Excepciones en Python
Python tiene muchas excepciones integradas que se generan cuando su programa encuentra un error (algo sale mal en el programa).
Cuando ocurren estas excepciones, el intérprete de Python detiene el proceso actual y lo pasa al proceso de llamada hasta que se maneja. Si no se maneja, el programa fallará.
Por ejemplo, consideremos un programa donde tenemos una función A
que llama a la función B
, que a su vez llama a la función C
. Si ocurre una excepción en la función C
pero no se maneja en C
, la excepción pasa a B
y luego a A
.
Si nunca se maneja, se muestra un mensaje de error y nuestro programa se detiene repentinamente e inesperadamente.
Atrapar excepciones en Python
En Python, las excepciones se pueden manejar usando un try
declaración.
La operación crítica que puede generar una excepción se coloca dentro del try
cláusula. El código que maneja las excepciones está escrito en el except
cláusula.
Así podemos elegir qué operaciones realizar una vez que hayamos capturado la excepción. Aquí hay un ejemplo simple.
# import module sys to get the type of exception
import sys
randomList = ['a', 0, 2]
for entry in randomList:
try:
print("The entry is", entry)
r = 1/int(entry)
break
except:
print("Oops!", sys.exc_info()[0], "occurred.")
print("Next entry.")
print()
print("The reciprocal of", entry, "is", r)
Salida
The entry is a Oops! <class 'ValueError'> occurred. Next entry. The entry is 0 Oops! <class 'ZeroDivisionError'> occured. Next entry. The entry is 2 The reciprocal of 2 is 0.5
En este programa, recorremos los valores de randomList lista. Como se mencionó anteriormente, la parte que puede causar una excepción se coloca dentro del try
bloquear.
Si no ocurre ninguna excepción, el except
se salta el bloque y continúa el flujo normal (para el último valor). Pero si ocurre alguna excepción, es capturada por el except
bloque (primer y segundo valor).
Aquí, imprimimos el nombre de la excepción usando el exc_info()
función dentro de sys
módulo. Podemos ver que a
causas ValueError
y 0
causas ZeroDivisionError
.
Dado que cada excepción en Python hereda de la base Exception
clase, también podemos realizar la tarea anterior de la siguiente manera:
# import module sys to get the type of exception
import sys
randomList = ['a', 0, 2]
for entry in randomList:
try:
print("The entry is", entry)
r = 1/int(entry)
break
except Exception as e:
print("Oops!", e.__class__, "occurred.")
print("Next entry.")
print()
print("The reciprocal of", entry, "is", r)
Este programa tiene la misma salida que el programa anterior.
Capturar excepciones específicas en Python
En el ejemplo anterior, no mencionamos ninguna excepción específica en el except
cláusula.
Esta no es una buena práctica de programación ya que detectará todas las excepciones y manejará todos los casos de la misma manera. Podemos especificar qué excepciones un except
cláusula debe atrapar.
Un try
la cláusula puede tener cualquier número de except
cláusulas para manejar diferentes excepciones, sin embargo, solo se ejecutará una en caso de que ocurra una excepción.
Podemos usar una tupla de valores para especificar múltiples excepciones en una cláusula de excepción. Aquí hay un pseudocódigo de ejemplo.
try:
# do something
pass
except ValueError:
# handle ValueError exception
pass
except (TypeError, ZeroDivisionError):
# handle multiple exceptions
# TypeError and ZeroDivisionError
pass
except:
# handle all other exceptions
pass
Generar excepciones en Python
En la programación de Python, se generan excepciones cuando se producen errores en tiempo de ejecución. También podemos generar excepciones manualmente usando el raise
palabra clave.
Opcionalmente, podemos pasar valores a la excepción para aclarar por qué se generó esa excepción.
>>> raise KeyboardInterrupt
Traceback (most recent call last):
...
KeyboardInterrupt
>>> raise MemoryError("This is an argument")
Traceback (most recent call last):
...
MemoryError: This is an argument
>>> try:
... a = int(input("Enter a positive integer: "))
... if a <= 0:
... raise ValueError("That is not a positive number!")
... except ValueError as ve:
... print(ve)
...
Enter a positive integer: -2
That is not a positive number!
Python prueba con la cláusula else
En algunas situaciones, es posible que desee ejecutar un determinado bloque de código si el bloque de código dentro de try
corrió sin ningún error. Para estos casos, puede usar el else
opcional palabra clave con el try
declaración.
Nota :Las excepciones en la cláusula else no son manejadas por las cláusulas except anteriores.
Veamos un ejemplo:
# program to print the reciprocal of even numbers
try:
num = int(input("Enter a number: "))
assert num % 2 == 0
except:
print("Not an even number!")
else:
reciprocal = 1/num
print(reciprocal)
Salida
Si pasamos un número impar:
Enter a number: 1 Not an even number!
Si pasamos un número par, el recíproco se calcula y se muestra.
Enter a number: 4 0.25
Sin embargo, si pasamos 0, obtenemos ZeroDivisionError
como el bloque de código dentro de else
no es manejado por el precedente except
.
Enter a number: 0 Traceback (most recent call last): File "<string>", line 7, in <module> reciprocal = 1/num ZeroDivisionError: division by zero
Python probar... finalmente
El try
declaración en Python puede tener un finally
opcional cláusula. Esta cláusula se ejecuta pase lo que pase y generalmente se usa para liberar recursos externos.
Por ejemplo, podemos estar conectados a un centro de datos remoto a través de la red o trabajar con un archivo o una interfaz gráfica de usuario (GUI).
En todas estas circunstancias, debemos limpiar el recurso antes de que el programa se detenga, ya sea que se haya ejecutado con éxito o no. Estas acciones (cerrar un archivo, GUI o desconectarse de la red) se realizan en el finally
cláusula para garantizar la ejecución.
Aquí hay un ejemplo de operaciones con archivos para ilustrar esto.
try:
f = open("test.txt",encoding = 'utf-8')
# perform file operations
finally:
f.close()
Este tipo de construcción asegura que el archivo se cierre incluso si ocurre una excepción durante la ejecución del programa.
python
- Palabras clave e identificadores de Python
- Declaración, sangría y comentarios de Python
- Variables, constantes y literales de Python
- Conversión de tipos de Python y conversión de tipos
- Entrada, salida e importación de Python
- Declaración de paso de Python
- Variables globales, locales y no locales de Python
- Administración de archivos y directorios de Python
- Manejo de excepciones de Python Uso de la instrucción try, except y finalmente
- Sensor de temperatura Python y Raspberry Pi
- Manejo de excepciones de C++:ejemplo Try, Catch, throw