Manejo de excepciones de Python

Hemos explorado Python básico hasta ahora desde el Conjunto 1 al 4 ( Conjunto 1 | Conjunto 2 | Conjunto 3 | Conjunto 4 ). 

En este artículo, discutiremos cómo manejar excepciones en Python usando try. catch, y finalmente declaración con la ayuda de ejemplos apropiados. 

El error en Python puede ser de dos tipos, es decir , errores de sintaxis y excepciones . Los errores son los problemas en un programa debido a que el programa detendrá la ejecución. Por otro lado, se generan excepciones cuando ocurren algunos eventos internos que cambian el flujo normal del programa. 

Diferencia entre error de sintaxis y excepciones

Error de sintaxis: como sugiere el nombre, este error se debe a una sintaxis incorrecta en el código. Conduce a la terminación del programa. 

Ejemplo: 

Python3

# initialize the amount variable
amount = 10000
  
# check that You are eligible to
#  purchase Dsa Self Paced or not
if(amount > 2999)
print("You are eligible to purchase Dsa Self Paced")

Producción:

Excepciones: se generan excepciones cuando el programa es sintácticamente correcto, pero el código resultó en un error. Este error no detiene la ejecución del programa, sin embargo, cambia el flujo normal del programa.

Ejemplo:

Python3

# initialize the amount variable
marks = 10000
  
# perform division with 0
a = marks / 0
print(a)

Producción:

En el ejemplo anterior, se generó ZeroDivisionError ya que estamos tratando de dividir un número por 0.

Nota: Exception es la clase base para todas las excepciones en Python. Puede consultar la jerarquía de excepciones aquí .  

Instrucción Try and Except: detección de excepciones

Las declaraciones Try y Except se utilizan para capturar y manejar excepciones en Python. Las declaraciones que pueden generar excepciones se mantienen dentro de la cláusula try y las declaraciones que manejan la excepción se escriben dentro de la cláusula excepto.

Ejemplo: Intentemos acceder al elemento de la array cuyo índice está fuera de límite y manejar la excepción correspondiente.

Python3

# Python program to handle simple runtime error
#Python 3
  
a = [1, 2, 3]
try: 
    print ("Second element = %d" %(a[1]))
  
    # Throws error since there are only 3 elements in array
    print ("Fourth element = %d" %(a[3]))
  
except:
    print ("An error occurred")
Producción

Second element = 2
An error occurred

En el ejemplo anterior, las declaraciones que pueden causar el error se colocan dentro de la declaración de prueba (segunda declaración de impresión en nuestro caso). La segunda declaración de impresión intenta acceder al cuarto elemento de la lista que no está allí y esto arroja una excepción. Luego, esta excepción es capturada por la declaración de excepción.

Captura de una excepción específica

Una declaración de prueba puede tener más de una cláusula excepto, para especificar controladores para diferentes excepciones. Tenga en cuenta que se ejecutará como máximo un controlador. Por ejemplo, podemos agregar IndexError en el código anterior. La sintaxis general para agregar excepciones específicas es: 

try:
    # statement(s)
except IndexError:
    # statement(s)
except ValueError:
    # statement(s)

Ejemplo: captura de una excepción específica en Python

Python3

# Program to handle multiple errors with one
# except statement
# Python 3
  
def fun(a):
    if a < 4:
  
        # throws ZeroDivisionError for a = 3
        b = a/(a-3)
  
    # throws NameError if a >= 4
    print("Value of b = ", b)
      
try:
    fun(3)
    fun(5)
  
# note that braces () are necessary here for 
# multiple exceptions
except ZeroDivisionError:
    print("ZeroDivisionError Occurred and Handled")
except NameError:
    print("NameError Occurred and Handled")
Producción

ZeroDivisionError Occurred and Handled

Si comentas en la línea fun(3), la salida será 

NameError Occurred and Handled

El resultado anterior es así porque tan pronto como Python intenta acceder al valor de b, se produce NameError. 

Prueba con la cláusula Else

En python, también puede usar la cláusula else en el bloque try-except que debe estar presente después de todas las cláusulas excepto. El código ingresa al bloque else solo si la cláusula try no genera una excepción.

Ejemplo: prueba con la cláusula else

Python3

# Program to depict else clause with try-except
# Python 3
# Function which returns a/b
def AbyB(a , b):
    try:
        c = ((a+b) / (a-b))
    except ZeroDivisionError:
        print ("a/b result in 0")
    else:
        print (c)
  
# Driver program to test above function
AbyB(2.0, 3.0)
AbyB(3.0, 3.0)

Producción:

-5.0
a/b result in 0 

Finalmente palabra clave en Python

Python proporciona una palabra clave finalmente , que siempre se ejecuta después de los bloques try y except. El bloque final siempre se ejecuta después de la finalización normal del bloque de prueba o después de que finaliza el bloque de prueba debido a alguna excepción.

Sintaxis:

try:
    # Some Code.... 

except:
    # optional block
    # Handling of exception (if required)

else:
    # execute if no exception

finally:
    # Some code .....(always executed)

Ejemplo:

Python3

# Python program to demonstrate finally
  
# No exception Exception raised in try block
try:
    k = 5//0  # raises divide by zero exception.
    print(k)
  
# handles zerodivision exception
except ZeroDivisionError:
    print("Can't divide by zero")
  
finally:
    # this block is always executed
    # regardless of exception generation.
    print('This is always executed')

Producción:

Can't divide by zero
This is always executed

Excepción de generación

La declaración de aumento permite al programador forzar que ocurra una excepción específica. El único argumento de raise indica la excepción que se va a generar. Debe ser una instancia de excepción o una clase de excepción (una clase que se deriva de Exception).

Python3

# Program to depict Raising Exception
  
try: 
    raise NameError("Hi there")  # Raise Error
except NameError:
    print ("An exception")
    raise  # To determine whether the exception was raised or not

La salida del código anterior simplemente se imprimirá como «Una excepción», pero también se producirá un error de tiempo de ejecución en el último debido a la declaración de aumento en la última línea. Entonces, la salida en su línea de comando se verá así 

Traceback (most recent call last):
  File "/home/d6ec14ca595b97bff8d8034bbf212a9f.py", line 5, in <module>
    raise NameError("Hi there")  # Raise Error
NameError: Hi there

Este artículo es una contribución de Nikhil Kumar Singh (nickzuck_007) 

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *