Manejo de excepciones en Python | Prueba y excepto en Python

Contenidos

Introducción

Los errores son la pesadilla de la existencia de un programador. Escribes un fragmento de código increíble, estás listo para ejecutarlo y construir un modelo de aprendizaje automático poderoso, y luego puf. Python arroja un error inesperado, poniendo fin a su esperanza de una ejecución rápida del código.

Todos y cada uno de nosotros se ha enfrentado a este problema y ha salido de él como un mejor programador. Enfrentar errores y errores es lo que aumenta nuestra confianza a largo plazo y nos enseña lecciones valiosas a lo largo del camino.

exception-handling-3578609

Tenemos algunas reglas al escribir programas en cualquier lenguaje de programación, como no usar un espacio al definir un nombre de variable, agregar dos puntos (:) después de la instrucción if, y así sucesivamente. Si no seguimos estas reglas, nos encontramos con errores de sintaxis y nuestro programa se niega a ejecutarse hasta que eliminemos esos errores.

Pero hay ocasiones en las que el programa es sintácticamente correcto y todavía arroja un error cuando intentamos ejecutar el programa. ¿Que está pasando aqui? Bueno, estos errores detectados durante la ejecución se denominan excepciones. Y lidiar con estos errores se llama manejo de excepciones.

Hablaremos sobre el manejo de excepciones en Pitón ¡aquí!

Tabla de contenido

  1. Ventajas del manejo de excepciones
  2. Excepciones comunes
  3. Declaración de prueba y excepción
  4. Otra declaración
  5. Finalmente declaración
  6. Caso de uso de la vida real de manejo de excepciones

Ventajas del manejo de excepciones

¿Por qué debería aprender a manejar excepciones? Déjame responder eso usando un argumento de dos puntas:

  1. Supongamos que ha escrito un script para leer miles de archivos presentes en varios directorios. Ahora, puede haber algún tipo de error allí, como que falta un tipo de archivo o tiene un formato incorrecto o está disponible en diferentes extensiones. En ese caso, no es posible abrir todos los archivos y escribir un script en consecuencia. El manejo de excepciones nos permite definir múltiples condiciones. Por ejemplo, si el formato es incorrecto, corríjalo primero y luego intente leer el archivo. De lo contrario, omita la lectura de ese archivo y cree un archivo de registro para que podamos tratarlo más tarde.
  2. En segundo lugar, digamos que estamos extrayendo datos de restaurantes de un sitio web y nuestro script busca el nombre, las reseñas y la dirección del restaurante. Por alguna razón, falta la dirección del restaurante en el sitio web. En este caso, si no estamos manejando las excepciones, nuestro script puede detenerse en el medio, por lo que mientras recopila datos en una gran cantidad, es esencial que manejemos las excepciones.

Excepciones comunes

Aquí hay una lista de las excepciones comunes que encontrará en Python:

  • ZeroDivisionError: Se eleva cuando intentas dividir un número por cero
  • ImportError: Se genera cuando intenta importar la biblioteca que no está instalada o ha proporcionado el nombre incorrecto
  • IndexError: Se genera cuando no se encuentra un índice en una secuencia. Por ejemplo, si la longitud de la lista es 10 y está intentando acceder al undécimo índice de esa lista, obtendrá este error.
  • IndentationError: Se eleva cuando la sangría no se especifica correctamente
  • 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
  • Exception: Clase base para todas las excepciones. Si no está seguro de qué excepción puede ocurrir, puede usar la clase base. Se encargará de todos ellos

Puede leer sobre excepciones más comunes aquí.

Manejo de excepciones en Python: declaración de prueba y excepción

Definamos una función para dividir dos números a y B. Funcionará bien si el valor de b es distinto de cero, pero generará un error si el valor de b es cero:

screenshot-from-2020-04-09-13-18-15-3143589

Podemos manejar esto usando el tratar y excepto declaración. Primero, se ejecutará la cláusula try, que son las declaraciones entre las palabras clave try y except.

Si no se produce ninguna excepción, se omitirá la cláusula except. Por otro lado, si se produce una excepción durante la ejecución de la cláusula try, se omitirán el resto de las declaraciones try:

Manejo de excepciones en Python: declaración Else

En Python, también podemos instruir a un programa para que ejecute ciertas líneas de código si no ocurre ninguna excepción usando el demás cláusula. Ahora, si no ocurre ninguna excepción en el código anterior, queremos imprimir «¡¡No se produjo ningún error !!».

Veamos cómo hacer esto:

Manejo de excepciones en Python: declaración finalmente

Ahora, ¿qué pasa si necesitamos algún tipo de acción que se ejecute si el error ocurrió o no (como mantener registros)? Para esto, tenemos el finalmente cláusula en Python. Siempre se ejecutará si el programa obtiene alguna de las excepciones o no.

Veremos cómo podemos utilizar el finalmente cláusula para escribir los registros más adelante en este artículo.

Ahora, en el ejemplo anterior, quiero imprimir el valor de a y B después de cada ejecución, independientemente de si se produjo el error o no. Veamos cómo hacer eso:

Caso de uso de la vida real de manejo de excepciones en Python

Hasta ahora, hemos visto el manejo de excepciones en algunos datos aleatorios. ¿Qué tal subir la palanca un poco y entender esto usando un ejemplo de la vida real?

Tenemos datos que contienen los detalles de los empleados, como su educación, edad, número de capacitaciones realizadas, etc. Los datos se dividen en varios directorios por región. Los detalles de los empleados que pertenecen a la misma región se almacenan en el mismo archivo.

Ahora, nuestra tarea es leer todos los archivos y concatenarlos para formar un solo archivo. Comencemos por importar algunas de las bibliotecas necesarias.

Obtener la estructura del directorio

Para ver la estructura del directorio, usaremos el glob biblioteca y para leer los archivos CSV, usaremos la Pandas Biblioteca:

Ver la estructura del directorio usando el glob.glob función y la ruta del directorio de destino. Puede descargar la estructura del directorio aquí.

screenshot-from-2020-04-08-22-16-19-9966985

Podemos ver que los nombres de las carpetas están representados como algunos números y en el siguiente paso pasaremos por cada uno de los directorios y veremos los archivos presentes:

screenshot-from-2020-04-08-22-19-42-7921371

En cada una de las carpetas, hay un archivo CSV presente que contiene los detalles de los empleados de esa región en particular. Puede abrir y ver cualquier archivo CSV. A continuación se muestra la imagen de cómo se ven los datos en el region_1.csv expediente. Contiene detalles de los empleados que pertenecen a la región 1:

screenshot-from-2020-04-08-22-21-42-1889046

Leer los archivos

Ahora, sabemos que hay un patrón en la estructura de directorio y nombre de archivo. En el directorio norte, hay un nombre de archivo CSV region_n regalo. Entonces ahora intentaremos leer todos estos archivos usando un bucle.

Sabemos que el número máximo es 34, por lo que usaremos un en bucle para iterar y leer los archivos en orden:

screenshot-from-2020-04-08-22-27-22-5262966

screenshot-from-2020-04-08-22-28-22-4584987

Puedes ver que el archivo region_7 no es presente. Entonces, una de las formas más sencillas de lidiar con esto es poner un si condición en el programa – si el nombre del directorio es 7 luego omita la lectura de ese archivo.

Pero, ¿y si tenemos que leer miles de archivos juntos? Sería una tarea tediosa actualizar la condición if cada vez que obtenemos un error.

Aquí, usaremos la declaración try y except para manejar los errores. Si hay alguna excepción durante el tiempo de ejecución mientras leemos cualquier archivo, simplemente saltaremos ese paso y continuaremos leyendo la siguiente carpeta. Imprimiremos el nombre del archivo con «¡Archivo no encontrado!» si el error es FileNotFoundError e imprima el nombre del archivo con «¡Otro error!» si ocurre cualquier otro error.

screenshot-from-2020-04-08-22-38-03-6851291

directory-7117961

Podemos ver que obtuvimos otro error en el archivo número 32. Intentemos leer este archivo por separado:

screenshot-from-2020-04-08-22-40-28-8400685

Hay algunos problemas con el formato de File 32. Si abre el archivo region_32.csv, verá que hay algunos comentarios agregados en la parte superior del archivo y podemos leer ese archivo usando el saltos parámetro:

screenshot-from-2020-04-08-22-42-19-5666066

Veamos cómo manejar esto.

Declaraciones Try, Except y Else

Crearemos dos variables booleanas: error de análisis, archivo no encontrado – e inicializar ambos como Falso al comienzo de cada iteración. Entonces, si obtenemos FileNotFoundError, entonces estableceremos archivo no encontrado como Verdadero.

Luego, imprimiremos ese archivo en particular como faltante y saltaremos esa iteración. Si conseguimos ParserError, entonces estableceremos error de análisis como Verdadero e imprima que el archivo en particular tiene un formato incorrecto y vuelva a leer el archivo usando el saltos parámetro.

Ahora, si no se produce ninguna excepción, se ejecutará el código de la instrucción else. En la declaración else, agregaremos el marco de datos a la lista de marcos de datos:

Declaración de prueba, excepción, otra y finalmente

Supongamos que desea crear un archivo de registro para realizar un seguimiento de qué archivos son correctos y cuáles tienen errores. Este es un caso de uso de la declaración finalmente. Ya sea que obtenga el error o no, la sentencia finalmente se ejecutará.

Entonces en el finalmente cláusula, escribiremos en el archivo con respecto al estado del archivo en cada iteración:

Notas finales

Utilizo el manejo de excepciones al extraer datos de varias páginas web. Me encantaría saber cómo usa el manejo de excepciones, así que comente a continuación con sus pensamientos y compártalos con la comunidad.

Si este artículo le pareció informativo, compártalo con sus amigos y comente a continuación sus consultas y comentarios. He enumerado algunos artículos asombrosos relacionados con Python y la ciencia de datos a continuación para su referencia:

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.