English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial básico de Python

Control de flujo en Python

Funciones en Python

Tipos de datos en Python

Operaciones de archivos en Python

Objetos y clases en Python

Fecha y hora de Python

Conocimientos avanzados de Python

Manual de referencia de Python

Manejo de excepciones en Python - Try, Except y finally

En este artículo, aprenderá cómo manejar excepciones en programas Python utilizando las sentencias try, except y finally. Esto lo inspirará a escribir código limpio, legible y eficiente en Python.

¿Qué son las excepciones en Python?

Python tiene muchosExcepciones integradas  Cuando algunos errores ocurren, obligarán a su programa a emitir errores.

Cuando ocurren estas excepciones, llevarán a que el proceso actual se detenga y se transmita al proceso de llamada hasta que se maneje. Si no se maneja, nuestro programa se colapsará.

Por ejemplo, si la función A llama a la función B, y esta a su vez llama a la función C, y ocurre una excepción en la función C. Si no se maneja esta excepción en C, la excepción se transmitirá a B y luego a A.

Si no se realiza el manejo, se lanzará un mensaje de error y nuestro programa se detendrá repentinamente.

En Python, capturar excepciones

En Python, se puede manejar excepciones utilizando la sentencia try.

Las operaciones que pueden causar excepciones se colocan en la cláusula try y el código para manejar excepciones se escribe en la cláusula except.

Después de capturar la excepción, qué operación realizaremos depende de nosotros mismos. Este es un ejemplo simple.

# Importar el módulo sys para obtener el tipo de excepción
import sys
randomList = ['a', 0, 2]
for entry in randomList:
    try:
        print("La entrada es", entry)
        r = 1/int(entry)
        break
    except:
        print("Oops!", sys.exc_info()[0], "ocurrió.")
        print("Siguiente entrada.")
        print()
print("El recíproco de", entry, "es", r)

Resultados de salida

La entrada es a
Oops! <class 'ValueError'> ocurrió.
Siguiente entrada.
La entrada es 0
Oops! <class 'ZeroDivisionError'> ocurrió.
Siguiente entrada.
La entrada es 2
El recíproco de 2 is 0.5

En este programa, se ejecutará en bucle hasta que el usuario ingrese un entero con un inverso válido. La parte que puede causar una excepción se coloca dentro del bloque try.

Si no se produce ninguna excepción, se saltará el contenido del bloque except y se continuará con el flujo normal. Pero si se produce alguna excepción, será capturada por el bloque except.

Aquí, usamos la función exinfo() del módulo sys para imprimir el nombre de la excepción y solicitamos al usuario que intente de nuevo. Podemos ver los valores ‘a’ y ‘1.3’ causará ValueError, ‘0’ causará ZeroDivisionError.

Capturar excepciones específicas en Python

En el ejemplo anterior, no mencionamos ninguna excepción en la cláusula except.

Esto no es un buen hábito de programación, ya que capturará todas las excepciones y las manejará de la misma manera. Podemos especificar qué excepciones capturará la cláusula except.

Una cláusula try puede tener cualquier número de cláusulas except para manejarlas de diferentes maneras, pero solo se ejecutará una cláusula except cuando se produce una excepción.

Podemos usar tuplas de valores para especificar múltiples excepciones en una cláusula except. Aquí hay un ejemplo de código pseudocode.

try:
   # Ejecutar ciertos códigos
   pass
except ValueError:
   # Manejo de la excepción ValueError
   pass
except (TypeError, ZeroDivisionError):
   # Manejo de múltiples excepciones
   # TypeError y ZeroDivisionError excepciones
   pass
except:
   # Handle all other exceptions
   pass

Throw exceptions

In Python programming, exceptions are thrown when corresponding errors occur at runtime, but we can use the keyword raise to force the throwing of exceptions.

We can also choose to pass a value to the exception to clarify why the exception was raised.

>>> 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("This is not a positive number!")
...    except ValueError as ve:
...    print(ve)
...    
Enter a positive integer: -2
This is not a positive number!

try...finally

The try statement in Python can have an optional finally clause. This clause will be executed in any case, and it is usually used to release external resources.

For example, we can connect to a remote data center via network connection, or use a file or a graphical user interface (GUI).

In all these cases, whether the resource is successful or not, we must clear the resource. These operations (closing the file, GUI, or disconnecting from the network) are executed in the finally clause to ensure execution.

This isFile operationsThis example illustrates this point.

try:
   f = open("test.txt", encoding = 'utf-8')
   # Execute file operations
finally:
   f.close()

This type of construction ensures that the file is closed even if an exception occurs.