Saltar al contenido

Python – Manejo de excepciones

octubre 16, 2021

Python proporciona dos características muy importantes para manejar cualquier error inesperado en sus programas de Python y para agregar capacidades de depuración en ellos:

  • Manejo de excepciones – Esto se trataría en este tutorial. Aquí hay una lista de Excepciones estándar disponibles en Python: Excepciones estándar.

  • Afirmaciones – Esto se trataría en el tutorial de afirmaciones en Python.

Lista de excepciones estándar –

No Señor. Nombre y descripción de la excepción
1

Excepción

Clase base para todas las excepciones

2

StopIteration

Se genera cuando el método next () de un iterador no apunta a ningún objeto.

3

Salida del sistema

Generado por la función sys.exit ().

4

Error estándar

Clase base para todas las excepciones integradas excepto StopIteration y SystemSalir.

5

Error aritmético

Clase base para todos los errores que ocurren para el cálculo numérico.

6

OverflowError

Se genera cuando un cálculo excede el límite máximo para un tipo numérico.

7

FloatingPointError

Se genera cuando falla un cálculo de punto flotante.

8

ZeroDivisionError

Se genera cuando se realiza una división o módulo por cero para todos los tipos numéricos.

9

AssertionError

Se genera en caso de falla de la declaración Assert.

10

AttributeError

Se genera en caso de falla en la referencia o asignación de atributo.

11

EOFError

Se genera cuando no hay entrada de la función raw_input () o input () y se alcanza el final del archivo.

12

ImportError

Se genera cuando falla una declaración de importación.

13

Teclado Interrumpido

Se genera cuando el usuario interrumpe la ejecución del programa, generalmente presionando Ctrl + c.

14

LookupError

Clase base para todos los errores de búsqueda.

15

IndexError

Se genera cuando no se encuentra un índice en una secuencia.

dieciséis

KeyError

Se genera cuando la clave especificada no se encuentra en el diccionario.

17

NameError

Se genera cuando no se encuentra un identificador en el espacio de nombres local o global.

18

UnboundLocalError

Se genera cuando se intenta acceder a una variable local en una función o método, pero no se le ha asignado ningún valor.

19

EnvironmentError

Clase base para todas las excepciones que ocurren fuera del entorno de Python.

20

IOError

Se genera cuando falla una operación de entrada / salida, como la declaración de impresión o la función open () al intentar abrir un archivo que no existe.

21

IOError

Criado por errores relacionados con el sistema operativo.

22

Error de sintaxis

Se genera cuando hay un error en la sintaxis de Python.

23

IndentationError

Se eleva cuando la sangría no se especifica correctamente.

24

Error del sistema

Se genera cuando el intérprete encuentra un problema interno, pero cuando se encuentra este error, el intérprete de Python no sale.

25

Salida del sistema

Se genera cuando se cierra el intérprete de Python mediante la función sys.exit (). Si no se maneja en el código, hace que el intérprete salga.

26

Error de tecleado

Se genera cuando se intenta una operación o función que no es válida para el tipo de datos especificado.

27

ValueError

Se genera cuando la función incorporada para un tipo de datos tiene el tipo válido de argumentos, pero los argumentos tienen valores no válidos especificados.

28

Error de tiempo de ejecución

Se genera cuando un error generado no entra en ninguna categoría.

29

NotImplementedError

Se genera cuando un método abstracto que debe implementarse en una clase heredada no está realmente implementado.

Afirmaciones en Python

Una afirmación es una verificación de cordura que puede activar o desactivar cuando haya terminado con la prueba del programa.

La forma más sencilla de pensar en una afirmación es compararla con una subir-si declaración (o para ser más precisos, una declaración de aumento si no). Se prueba una expresión y, si el resultado es falso, se genera una excepción.

Las afirmaciones se llevan a cabo mediante la declaración assert, la palabra clave más nueva de Python, introducida en la versión 1.5.

Los programadores a menudo colocan aserciones al comienzo de una función para verificar una entrada válida y después de una llamada de función para verificar una salida válida.

los afirmar Declaración

Cuando encuentra una declaración de aserción, Python evalúa la expresión que la acompaña, que es de esperar que sea verdadera. Si la expresión es falsa, Python genera un AssertionError excepción.

los sintaxis para afirmar es –

assert Expression[, Arguments]

Si la aserción falla, Python usa ArgumentExpression como argumento para AssertionError. Las excepciones AssertionError se pueden capturar y manejar como cualquier otra excepción usando la declaración try-except, pero si no se manejan, terminarán el programa y producirán un rastreo.

Ejemplo

Aquí hay una función que convierte una temperatura de grados Kelvin a grados Fahrenheit. Dado que cero grados Kelvin es tan frío como se pone, la función se rescata si ve una temperatura negativa:

#!/usr/bin/python
def KelvinToFahrenheit(Temperature):
   assert (Temperature >= 0),"Colder than absolute zero!"
   return ((Temperature-273)*1.8)+32
print KelvinToFahrenheit(273)
print int(KelvinToFahrenheit(505.78))
print KelvinToFahrenheit(-5)

Cuando se ejecuta el código anterior, produce el siguiente resultado:

32.0
451
Traceback (most recent call last):
File "test.py", line 9, in <module>
print KelvinToFahrenheit(-5)
File "test.py", line 4, in KelvinToFahrenheit
assert (Temperature >= 0),"Colder than absolute zero!"
AssertionError: Colder than absolute zero!

¿Qué es la excepción?

Una excepción es un evento que ocurre durante la ejecución de un programa que interrumpe el flujo normal de las instrucciones del programa. En general, cuando una secuencia de comandos de Python se encuentra con una situación que no puede afrontar, genera una excepción. Una excepción es un objeto de Python que representa un error.

Cuando una secuencia de comandos de Python genera una excepción, debe manejar la excepción inmediatamente, de lo contrario, termina y se cierra.

Manejo de una excepción

Si tienes algo suspicaz código que puede generar una excepción, puede defender su programa colocando el código sospechoso en un tratar: cuadra. Después del try: block, incluya un excepto: declaración, seguida de un bloque de código que maneja el problema de la manera más elegante posible.

Sintaxis

Aquí está la sintaxis simple de intentar … excepto … más bloques –

try:
   You do your operations here;
   ......................
except ExceptionI:
   If there is ExceptionI, then execute this block.
except ExceptionII:
   If there is ExceptionII, then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

Aquí hay algunos puntos importantes sobre la sintaxis mencionada anteriormente:

  • Una sola declaración try puede tener varias declaraciones except. Esto es útil cuando el bloque try contiene declaraciones que pueden generar diferentes tipos de excepciones.

  • También puede proporcionar una cláusula except genérica, que maneja cualquier excepción.

  • Después de la (s) cláusula (s) except, puede incluir una cláusula else. El código del bloque else se ejecuta si el código del bloque try: no genera una excepción.

  • El bloque else es un buen lugar para el código que no necesita la protección de try: block.

Ejemplo

Este ejemplo abre un archivo, escribe contenido en el archivo, y sale con elegancia porque no hay ningún problema.

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can't find file or read data"
else:
   print "Written content in the file successfully"
   fh.close()

Esto produce el siguiente resultado:

Written content in the file successfully

Ejemplo

Este ejemplo intenta abrir un archivo donde no tiene permiso de escritura, por lo que genera una excepción:

#!/usr/bin/python

try:
   fh = open("testfile", "r")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can't find file or read data"
else:
   print "Written content in the file successfully"

Esto produce el siguiente resultado:

Error: can't find file or read data

los excepto Cláusula sin excepciones

También puede usar la declaración except sin excepciones definidas de la siguiente manera:

try:
   You do your operations here;
   ......................
except:
   If there is any exception, then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

Este tipo de prueba-excepto declaración captura todas las excepciones que ocurren. Sin embargo, el uso de este tipo de declaración try-except no se considera una buena práctica de programación, ya que detecta todas las excepciones pero no hace que el programador identifique la causa raíz del problema que pueda ocurrir.

los excepto Cláusula con múltiples excepciones

También puedes usar el mismo excepto declaración para manejar múltiples excepciones de la siguiente manera:

try:
   You do your operations here;
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   If there is any exception from the given exception list, 
   then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

La cláusula de intentar finalmente

Puedes usar un finalmente: bloque junto con un tratar: cuadra. El bloque finalmente es un lugar para colocar cualquier código que deba ejecutarse, ya sea que el bloque try haya generado una excepción o no. La sintaxis de la declaración de intentar finalmente es la siguiente:

try:
   You do your operations here;
   ......................
   Due to any exception, this may be skipped.
finally:
   This would always be executed.
   ......................

No se puede utilizar demás también junto con una cláusula final.

Ejemplo

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
finally:
   print "Error: can't find file or read data"

Si no tiene permiso para abrir el archivo en modo de escritura, esto producirá el siguiente resultado:

Error: can't find file or read data

El mismo ejemplo se puede escribir de manera más clara de la siguiente manera:

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   try:
      fh.write("This is my test file for exception handling!!")
   finally:
      print "Going to close the file"
      fh.close()
except IOError:
   print "Error: can't find file or read data"

Cuando se lanza una excepción en el tratar bloque, la ejecución pasa inmediatamente al finalmente cuadra. Después de todas las declaraciones en el finalmente se ejecutan el bloque, la excepción se lanza de nuevo y se maneja en el excepto declaraciones si está presente en la siguiente capa superior de la prueba-excepto declaración.

Argumento de una excepción

Una excepción puede tener un argumento, que es un valor que proporciona información adicional sobre el problema. El contenido del argumento varía según la excepción. Captura el argumento de una excepción proporcionando una variable en la cláusula except de la siguiente manera:

try:
   You do your operations here;
   ......................
except ExceptionType, Argument:
   You can print value of Argument here...

Si escribe el código para manejar una sola excepción, puede hacer que una variable siga al nombre de la excepción en la declaración except. Si está capturando varias excepciones, puede hacer que una variable siga a la tupla de la excepción.

Esta variable recibe el valor de la excepción que contiene principalmente la causa de la excepción. La variable puede recibir un valor único o varios valores en forma de tupla. Esta tupla generalmente contiene la cadena de error, el número de error y una ubicación del error.

Ejemplo

A continuación se muestra un ejemplo de una única excepción:

#!/usr/bin/python

# Define a function here.
def temp_convert(var):
   try:
      return int(var)
   except ValueError, Argument:
      print "The argument does not contain numbersn", Argument

# Call above function here.
temp_convert("xyz");

Esto produce el siguiente resultado:

The argument does not contain numbers
invalid literal for int() with base 10: 'xyz'

Plantear una excepción

Puede generar excepciones de varias formas mediante el uso de la declaración de aumento. Los…

close