Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

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

  1. Palabras clave e identificadores de Python
  2. Declaración, sangría y comentarios de Python
  3. Variables, constantes y literales de Python
  4. Conversión de tipos de Python y conversión de tipos
  5. Entrada, salida e importación de Python
  6. Declaración de paso de Python
  7. Variables globales, locales y no locales de Python
  8. Administración de archivos y directorios de Python
  9. Manejo de excepciones de Python Uso de la instrucción try, except y finalmente
  10. Sensor de temperatura Python y Raspberry Pi
  11. Manejo de excepciones de C++:ejemplo Try, Catch, throw