El manejo de errores en Python es una parte fundamental de la programación para garantizar que nuestros programas sean robustos y puedan manejar situaciones inesperadas. Python proporciona diversas herramientas y técnicas para manejar y controlar errores.
En Python, los errores se conocen como excepciones y se producen cuando ocurre una situación inesperada durante la ejecución de un programa. Algunos ejemplos comunes de excepciones son TypeError, NameError, ValueError, entre otros.
A continuación, se presenta una descripción detallada sobre el manejo de errores en Python:
try-except se utiliza para capturar y manejar excepciones. El código sospechoso de causar una excepción se coloca dentro del bloque try, y si se produce alguna excepción, se ejecuta el bloque except correspondiente.try: # Código sospechoso except ExceptionType: # Manejar la excepción
El bloque except puede manejar excepciones específicas o genéricas. Por ejemplo:
try: # Código sospechoso except ValueError: # Manejar la excepción ValueError except: # Manejar cualquier otra excepción
finally se utiliza para ejecutar código que debe ejecutarse sin importar si se produjo una excepción o no. Este bloque se coloca después del bloque try-except.try: # Código sospechoso except ExceptionType: # Manejar la excepción finally: # Código que se ejecuta siempre
raise se utiliza para generar manualmente una excepción en Python. Esto nos permite lanzar una excepción específica cuando ocurre una condición no deseada.if condition: raise ExceptionType("Mensaje de error")
Por ejemplo, para generar una excepción TypeError, se puede utilizar la siguiente línea de código:
raise TypeError("Se esperaba un tipo de dato diferente")
else junto con try-except para especificar un código que se ejecutará si no se produce ninguna excepción.try: # Código sospechoso except ExceptionType: # Manejar la excepción else: # Código que se ejecuta si no hay excepciones
try: # Código sospechoso except ValueError as ve: # Manejar excepción ValueError except TypeError as te: # Manejar excepción TypeError
Estas son algunas de las técnicas más comunes para manejar excepciones en Python. Sin embargo, hay muchas más opciones y posibilidades para adaptarse a diferentes escenarios.
El manejo de errores adecuado es crucial para garantizar la robustez y confiabilidad de nuestros programas. Al anticipar y manejar las excepciones de manera adecuada, podemos evitar fallas inesperadas y proporcionar mensajes de error claros y útiles para los usuarios y desarrolladores.
Todo esto y más lo puedes aprender en el Curso de Python: Comprehensions, Funciones y Manejo de Errores
Jhon Freddy Tavera Blandon
EstudianteNicolas Alpargatero
EstudianteEduardo Peña Ramos
EstudianteIkal Esteban Fernández Galván
EstudianteWaldir Zapata Garcia
EstudianteWaldir Zapata Garcia
Estudiantedef dividir_numeros(a, b): try: resultado = a / b except ZeroDivisionError: print("Error: No es posible dividir entre cero.") except TypeError: print("Error: Asegúrate de ingresar números válidos.") else: print(f"El resultado de la división es: {resultado}") finally: print("Fin del manejo de errores.") # Ejemplo de uso dividir_numeros(10, 2) dividir_numeros(10, 0) dividir_numeros(10, "2") #En este ejemplo, tenemos una función dividir_numeros(a, b)que toma dos argumentos y realiza una división entre ellos. #Sin embargo, pueden ocurrir algunos errores en este proceso:
Otro tema para profundizar son los warnings
https://docs.python.org/3/library/warnings.html#warning-categories
Jerarquía de Excepciones
BaseException ├── BaseExceptionGroup ├── GeneratorExit ├── KeyboardInterrupt ├── SystemExit └── Exception ├── ArithmeticError │ ├── FloatingPointError │ ├── OverflowError │ └── ZeroDivisionError ├── AssertionError ├── AttributeError ├── BufferError ├── EOFError ├── ExceptionGroup [BaseExceptionGroup] ├── ImportError │ └── ModuleNotFoundError ├── LookupError │ ├── IndexError │ └── KeyError ├── MemoryError ├── NameError │ └── UnboundLocalError ├── OSError │ ├── BlockingIOError │ ├── ChildProcessError │ ├── ConnectionError │ │ ├── BrokenPipeError │ │ ├── ConnectionAbortedError │ │ ├── ConnectionRefusedError │ │ └── ConnectionResetError │ ├── FileExistsError │ ├── FileNotFoundError │ ├── InterruptedError │ ├── IsADirectoryError │ ├── NotADirectoryError │ ├── PermissionError │ ├── ProcessLookupError │ └── TimeoutError ├── ReferenceError ├── RuntimeError │ ├── NotImplementedError │ └── RecursionError ├── StopAsyncIteration ├── StopIteration ├── SyntaxError │ └── IndentationError │ └── TabError ├── SystemError ├── TypeError ├── ValueError │ └── UnicodeError │ ├── UnicodeDecodeError │ ├── UnicodeEncodeError │ └── UnicodeTranslateError └── Warning ├── BytesWarning ├── DeprecationWarning ├── EncodingWarning ├── FutureWarning ├── ImportWarning ├── PendingDeprecationWarning ├── ResourceWarning ├── RuntimeWarning ├── SyntaxWarning ├── UnicodeWarning └── UserWarning
Excelente diagrama de Warnings, muchas gracias, Nico.
Una cosa que deberiais saber es que el try-catch es muy costoso cuando hace el catch, en el caso que no haya error puede ser incluso más rapido que un If pero no es bueno abusar del try-catch para cosas que SABES que pueden fallar y como fallan (ejemplo: una division por cero).
En definitiva el try-catch no debe usarse en situaciones donde el error es predecible porque el If es aplastantemente más rápido en esos casos.
ejemplo try-catch
while True: try: x = int(input("Please enter a number: ")) break except ValueError: print("Oops! That was no valid number. Try again...")
Documentacion python: https://docs.python.org/3/library/warnings.html#warning-categories