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