Manejo de excepciones en python

Crear software es una tarea abrumadora. Para mejorar su software, su aplicación debe continuar funcionando en circunstancias imprevistas. Por ejemplo, suponga que su aplicación necesita obtener información de Internet.

Recomendado: preguntas python

¿Qué sucede si la persona que usa la aplicación pierde su conexión a Internet?

Otro problema común es qué hacer si el usuario ingresa una entrada no válida. O intente abrir un archivo que su aplicación no admita.

Todas estas situaciones se pueden manejar usando las capacidades integradas de manejo de excepciones de Python.Estas características generalmente son try cuando except declaración.

Comencemos por comprender algunas de las excepciones más comunes.

Excepción más común en python

Python admite muchas excepciones diferentes. A continuación se muestra una lista de sugerencias que puede ver cuando comience a usar el lenguaje.

  • Exception – Excepciones básicas en las que se basa todo lo demás
  • AttributeError – Ocurre cuando una asignación o referencia de propiedad falla.
  • ImportError Ocurre cuando la instrucción -import no puede encontrar una definición de módulo, o… import no puede encontrar el nombre para importar.
  • ModuleNotFoundError – Subclase de ImportError causada por la importación cuando no se encuentra el módulo
  • IndexError – Ocurre cuando el índice de secuencia está fuera de los límites.
  • KeyError – Ocurre cuando una clave de mapa (diccionario) no se puede encontrar en un conjunto de claves existente.
  • KeyboardInterrupt – Ocurre cuando el usuario presiona la tecla de pausa (generalmente) Control-C Devolver a Delete).
  • NameError – Ocurre cuando no se puede encontrar un nombre local o global.
  • OSError – Ocurre cuando una función devuelve un error relacionado con el sistema.
  • RuntimeError– Se produce cuando se detecta un error que no encaja en ninguna de las otras categorías.
  • SyntaxError – Se produce cuando se produce un error de sintaxis en el analizador.
  • TypeError – Ocurre cuando se aplica una acción o función a un objeto del tipo incorrecto. El valor asociado es una cadena que detalla la discrepancia de tipo.
  • ValueError – Se produce cuando una operación o función integrada es del tipo correcto pero recibe un argumento con un valor incorrecto y la situación no se describe mediante una excepción más precisa, como IndexError.
  • ZeroDivisionError – Ocurre cuando el segundo argumento de una operación de división o módulo es cero.

Puede encontrar la documentación de Python aquí para obtener una lista completa de las excepciones integradas.

Ahora veamos qué podemos manejar realmente cuando ocurre una excepción.

Manejo de excepciones en python

Python viene con una sintaxis especial para capturar excepciones. try/except declaración.

Esta es la forma básica para capturar excepciones con python.

try:
    # Code that may raise an exception goes here
except ImportError:
    # Code that is executed when an exception occurs

Pon código ahí que pueda causar problemas try. Esto puede ser un código para abrir un archivo u obtener información del usuario. El segundo bloque es exceptutiliza este código ImportError para detectar que ocurrió un error.

Recomendado: mejores frameworks python

Cuando escribes except sin especificar el tipo de excepción python, se llama pura excepción.. estos no son recomendables:

try:
    with open('example.txt') as file_handler:
        for line in file_handler:
            print(line)
except:
    print('An error occurred')

La razón por la que hacer osos es un mal hábito es porque no sabes qué tipo de excepción estás atrapando. Esto hará que le resulte más difícil darse cuenta de lo que está mal. Un tipo de excepción inesperado puede bloquear su aplicación con un mensaje útil si reduce el tipo de excepción al tipo que espera.

En este punto, puede decidir capturar otras condiciones.

Suponga que desea capturar varias excepciones. Aquí hay una manera de hacerlo:

try:
    with open('example.txt') as file_handler:
        for line in file_handler:
            print(line)
    import something
except OSError:
    print('An error occurred')
except ImportError:
    print('Unknown import!')

Este controlador de excepciones detecta dos tipos de excepciones: OSError cuando ImportError si ocurre cualquier otro tipo de excepción, este controlador no la detectará y el código se detendrá.

Al hacer esto, puede reescribir el código anterior más fácilmente.

try:
    with open('example.txt') as file_handler:
        for line in file_handler:
            print(line)
    import something
except (OSError, ImportError):
    print('An error occurred')

Por supuesto, crear una tupla en python de excepciones hace que sea más difícil saber qué excepción ocurrió. En otras palabras, es difícil para este código saber qué excepción se ha producido.

Ocurre una excepción en python

¿Qué pasa si se encuentra una excepción en python? Hay varias opciones. Puede imprimir el mensaje como en el ejemplo anterior. También puede escribir mensajes en un archivo de registro. Como alternativa, puede volver a generar la excepción si sabe que la excepción debería detener la ejecución de la aplicación.

Lanzar una excepción es el proceso de forzar una excepción. Lanzar excepciones en casos especiales. Por ejemplo, si hay un problema con su aplicación, puede encontrar una excepción. También tiende a generar excepciones después de que ya se haya procesado.

Puedes usar en Python incorporado raise La declaración que arroja la excepción:

try:
    raise ImportError
except ImportError:
    print('Caught an ImportError')

Puede generar mensajes personalizados lanzando excepciones.

>>> raise Exception('Something bad happened!')
Traceback (most recent call last):
  Python Shell, prompt 1, line 1
builtins.Exception: Something bad happened!

Si no proporciona un mensaje, la excepción es:

>>> raise Exception
Traceback (most recent call last):
  Python Shell, prompt 2, line 1
builtins.Exception:

¡Descubramos ahora los objetos excepcionales!

Comprobar objeto de excepción

Cuando ocurre una excepción, Python crea un objeto de excepción. Puede verificar esto asignando el objeto de excepción a una variable la declaración as :

>>> try:
...     raise ImportError('Bad import')
... except ImportError as error:
...     print(type(error))
...     print(error.args)
...     print(error)
... 
<class 'ImportError'>
('Bad import',)
Bad import

En este ejemplo, ImportError contra el  error , ahora puedes usar type() , una función que sabe qué excepción es. Si tiene una tupla de excepción pero no sabe de inmediato qué excepción detectó, esto resolverá el problema mencionado anteriormente en este artículo.

Usar declaración finally

Esta declaración try/except es más que una declaración try cuando utilizas except, puedes añadir finally y asegurarte que se ejecute al final también. La declaración finally es un bloque de código que siempre se ejecuta, incluso si ocurre una excepción interna try.

Puedes usar finally para limpieza. Por ejemplo, es posible que deba cerrar las conexiones de la base de datos o los identificadores de archivos. Para hacer esto, el código try/except/finally.

Tomemos un ejemplo antinatural:

>>> try:
...     1 / 0
... except ZeroDivisionError:
...     print('You can not divide by zero!')
... finally:
...     print('Cleaning up')
... 
You can not divide by zero!
Cleaning up

Este ejemplo es ZeroDivisionError agregue código de limpieza y excepciones.

Sin embargo, puedes omitir except con con un bloque completo y try/finally en su lugar:

>>> try:
...     1/0
... finally:
...     print('Cleaning up')
... 
Cleaning upTraceback (most recent call last):
  Python Shell, prompt 6, line 2
builtins.ZeroDivisionError: division by zero

No te preocupes esta vez por ZeroDivisionError, la excepción es finally el bloque de código para esta declaración se ejecutara.

Usar declaración else

Se puede usar otra declaración en el manejo de excepciones de Python. Este bloque else.puedes usarlo  que ejecuten Instrucciones de código cuando no hay excepciones.

Aquí un ejemplo:

>>> try:
...     print('This is the try block')
... except IOError:
...     print('An IOError has occurred')
... else:
...     print('This is the else block')
... 
This is the try block
This is the else block

Este código no arroja una excepción, por lo que try con bloques else se ejecutan ambos bloques.

Palabras finales

Ahora comprende los conceptos básicos del manejo de excepciones integrado de Python. En este artículo, aprendiste sobre los siguientes temas:

  • Excepción general
  • Manejo de excepciones en python
  • Ocurre una excepción en python
  • Comprobar objeto de excepción en python
  • Usar declaración finally
  • Usar declaración else

Aprender a detectar excepciones en python de manera efectiva requiere práctica. Una vez que aprenda a detectar excepciones, podrá mejorar su código para que funcione mejor cuando ocurran eventos inesperados.

¿ Te fue útil este artículo ?
⬇️ Ayudame compartiendo para poder llegar a más personas.⬇️