Hemos explorado Python básico hasta ahora desde el Conjunto 1 al 4 ( Serie 1 | Conjunto 2 | Conjunto 3 | Conjunto 4 ).
En este artículo, discutiremos cómo manejar excepciones en Python usando declaraciones try, except y finalmente con la ayuda de ejemplos adecuados.
El error en Python puede ser de dos tipos, es decir. Errores de sintaxis y excepciones . Los errores son 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.
Diferentes tipos de excepciones en Python:
En Python, existen varias excepciones integradas de Python que se pueden generar cuando se produce un error durante la ejecución de un programa. Estos son algunos de los tipos de excepciones más comunes en Python:
- Error de sintaxis: Esta excepción se genera cuando el intérprete encuentra un error de sintaxis en el código, como una palabra clave mal escrita, dos puntos faltantes o un paréntesis desequilibrado.
- Error de tecleado : Esta excepción se genera cuando una operación o función se aplica a un objeto del tipo incorrecto, como agregar una cadena a un número entero.
- NombreError : Esta excepción se genera cuando el nombre de una variable o función no se encuentra en el alcance actual.
- Error de índice : esta excepción se genera cuando un índice está fuera del rango para una lista, tupla u otros tipos de secuencia.
- Error de clave : Esta excepción se genera cuando no se encuentra una clave en un diccionario.
- Error de valor : Esta excepción se genera cuando se llama a una función o método con un argumento o entrada no válido, como al intentar convertir una cadena en un número entero cuando la cadena no representa un número entero válido.
- Error de atributo : Esta excepción se genera cuando no se encuentra un atributo o método en un objeto, como al intentar acceder a un atributo inexistente de una instancia de clase.
- IOError : esta excepción se genera cuando una operación de E/S, como leer o escribir un archivo, falla debido a un error de entrada/salida.
- Error de división cero : Esta excepción se genera cuando se intenta dividir un número por cero.
- Error de importación : Esta excepción se genera cuando una declaración de importación no puede encontrar o cargar un módulo.
Estos son sólo algunos ejemplos de los muchos tipos de excepciones que pueden ocurrir en Python. Es importante manejar las excepciones correctamente en su código usando bloques try-except u otras técnicas de manejo de errores, para poder manejar los errores con elegancia y evitar que el programa falle.
Diferencia entre errores 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:
Hay un error de sintaxis en el código. El ‘ if'> La declaración debe ir seguida de dos puntos (:>), y el ‘ print'> La declaración debe tener sangría para estar dentro del ‘ if'> bloquear.
Python3
cómo eliminar el primer carácter en excel
amount>=> 10000> 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 genera un error. Este error no detiene la ejecución del programa, sin embargo, cambia el flujo normal del programa.
Ejemplo:
Aquí en este código estamos dividiendo el 'marcas' por cero por lo que ocurrirá un error conocido como 'Error de división cero'
Python3
marks>=> 10000> a>=> marks>/> 0> print>(a)> |
>
>
Producción:

En el ejemplo anterior, se generó ZeroDivisionError cuando intentamos dividir un número entre 0.
Nota: Exception es la clase base para todas las excepciones en Python. Puedes consultar la jerarquía de excepciones. aquí .
Ejemplo:
1) TypeError: esta excepción se genera cuando una operación o función se aplica a un objeto del tipo incorrecto. He aquí un ejemplo:
Aquí un 'Error de tecleado' Se plantea ya que ambos tipos de datos que se están agregando son diferentes.
Python3
x>=> 5> y>=> 'hello'> z>=> x>+> y> |
>
>
output: Traceback (most recent call last): File '7edfa469-9a3c-4e4d-98f3-5544e60bff4e.py', line 4, in z = x + y TypeError: unsupported operand type(s) for +: 'int' and 'str'>
prueba el bloque catch para resolverlo:
El código intenta agregar un número entero ( ‘ x'> ) y una cadena ( ‘ y'> ) juntos, lo cual no es una operación válida, y generará un ‘ TypeError'> . El código utilizó un ‘ try'> y ‘ except'> bloquee para detectar esta excepción e imprimir un mensaje de error.
Python3
x>=> 5> y>=> 'hello'> try>:> >z>=> x>+> y> except> TypeError:> >print>(>'Error: cannot add an int and a str'>)> |
>
>Producción
Error: cannot add an int and a str>
Declaración de prueba y excepción: detección de excepciones
Las declaraciones try y except se utilizan para detectar 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 except.
Ejemplo: Aquí intentamos acceder al elemento de la matriz cuyo índice está fuera de límite y manejar la excepción correspondiente.
Python3
a>=> [>1>,>2>,>3>]> try>:> >print> (>'Second element = %d'> %>(a[>1>]))> >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 try (segunda declaración print en nuestro caso). La segunda declaración de impresión intenta acceder al cuarto elemento de la lista que no está allí y esto genera una excepción. Luego, esta excepción es detectada por la declaración except.
Captura de excepción específica
Una declaración try puede tener más de una cláusula except 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: Detectar excepciones específicas en Python
El código define una función. ‘ fun(a)'> que calculab>basado en la entradaa>. Sia>es menor que 4, intenta una división por cero, provocando un ‘ ZeroDivisionError'> . El código llamafun(3)>yfun(5)>dentro de un bloque try-except. Se encarga deZeroDivisionError>parafun(3)>y huellas Se produjo y se solucionó el error ZeroDivisionError. El ‘ NameError'> El bloque no se ejecuta ya que no hay ‘ NameError'> excepciones en el código.
Python3
def> fun(a):> >if> a <>4>:> >b>=> a>/>(a>->3>)> >print>(>'Value of b = '>, b)> > try>:> >fun(>3>)> >fun(>5>)> except> ZeroDivisionError:> >print>(>'ZeroDivisionError Occurred and Handled'>)> except> NameError:> >print>(>'NameError Occurred and Handled'>)> |
>
>Producción
ZeroDivisionError Occurred and Handled>
Si comentas la línea fun(3), el resultado será
NameError Occurred and Handled>
El resultado anterior es así porque tan pronto como Python intenta acceder al valor de b, se produce NameError.
Pruebe con la cláusula más
En Python, también puedes usar la cláusula else en el bloque try-except que debe estar presente después de todas las cláusulas except. El código ingresa al bloque else solo si la cláusula try no genera una excepción.
Pruebe con la cláusula else
El código define una función. AbyB(a, b)> que calculac>como ((a+b) / (a-b)) y maneja un potencialZeroDivisionError>. Imprime el resultado si no hay error de división por cero. Vocación AbyB(2.0, 3.0)> calcula e imprime-5.0>, mientras llama AbyB(3.0, 3.0)> intenta dividir por cero, lo que resulta en un ZeroDivisionError> , que es atrapado y a/b resulta en 0 está impreso.
Python3
def> AbyB(a , b):> >try>:> >c>=> ((a>+>b)>/> (a>->b))> >except> ZeroDivisionError:> >print> (>'a/b result in 0'>)> >else>:> >print> (c)> 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 terminación normal del bloque de prueba o después de que el bloque de prueba termina 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:
El código intenta realizar una división de números enteros por cero, lo que da como resultado un ZeroDivisionError> . Capta la excepción e imprime. No puedo dividir por cero. Independientemente de la excepción, elfinally>El bloque se ejecuta e imprime. Esto siempre se ejecuta.
Python3
try>:> >k>=> 5>/>/>0> >print>(k)> except> ZeroDivisionError:> >print>(>'Can't divide by zero'>)> finally>:> >print>(>'This is always executed'>)> |
>
>
Producción:
Can't divide by zero This is always executed>
Generar excepción
El declaración de aumento permite al programador forzar que ocurra una excepción específica. El único argumento en aumento indica la excepción que se planteará. Debe ser una instancia de excepción o una clase de excepción (una clase que deriva de Exception).
Este código plantea intencionalmente unaNameError>con el mensaje Hola utilizando elraise>declaración dentro de untry>bloquear. Luego, atrapa elNameError>excepción, impresiones Una excepción, y vuelve a generar la misma excepción usandoraise>. Esto demuestra cómo se pueden generar y manejar excepciones en Python, lo que permite mensajes de error personalizados y una mayor propagación de excepciones.
Python3
try>:> >raise> NameError(>'Hi there'>)> except> NameError:> >print> (>'An exception'>)> >raise> |
>
>
La salida del código anterior simplemente se imprimirá en una línea como una excepción, pero también se producirá un error de tiempo de ejecución en la última 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 raise NameError('Hi there') # Raise Error NameError: Hi there> Ventajas del manejo de excepciones:
- Fiabilidad mejorada del programa : Al manejar las excepciones correctamente, puede evitar que su programa falle o produzca resultados incorrectos debido a errores o entradas inesperadas.
- Manejo de errores simplificado : El manejo de excepciones le permite separar el código de manejo de errores de la lógica principal del programa, lo que facilita la lectura y el mantenimiento del código.
- Código más limpio: Con el manejo de excepciones, puede evitar el uso de declaraciones condicionales complejas para verificar si hay errores, lo que genera un código más limpio y legible.
- Depuración más sencilla : Cuando se genera una excepción, el intérprete de Python imprime un rastreo que muestra la ubicación exacta donde ocurrió la excepción, lo que facilita la depuración del código.
Desventajas del manejo de excepciones:
- Gastos generales de rendimiento: El manejo de excepciones puede ser más lento que usar declaraciones condicionales para verificar errores, ya que el intérprete tiene que realizar trabajo adicional para detectar y manejar la excepción.
- Mayor complejidad del código : El manejo de excepciones puede hacer que su código sea más complejo, especialmente si tiene que manejar múltiples tipos de excepciones o implementar una lógica de manejo de errores compleja.
- Posibles riesgos de seguridad: Las excepciones manejadas incorrectamente pueden potencialmente revelar información confidencial o crear vulnerabilidades de seguridad en su código, por lo que es importante manejar las excepciones con cuidado y evitar exponer demasiada información sobre su programa.
En general, los beneficios del manejo de excepciones en Python superan los inconvenientes, pero es importante usarlo con criterio y cuidado para mantener la calidad del código y la confiabilidad del programa.
Este artículo es una contribución de Nikhil Kumar Singh (nickzuck_007)