Juan Pena Verdú
Tutorial de Errores y excepciones de python en español.
Python2
Python3
Victor Hugo Soria
Gracias por el aporte!
Andres Fernando Campero Orozco
Gracias
El manejo de errores en Python es clave para evitar que un programa termine de forma anticipada y para diseñar flujos de control robustos. Aquí aprenderás a usar la jerarquía de excepciones, a lanzar y capturar errores con intención, y a aplicar buenas prácticas que mejoran la calidad del código.
¿Por qué el manejo de errores en Python evita que tu programa termine?
Los errores en tiempo de ejecución son distintos a los de sintaxis: si hay un error de sintaxis, el programa ni siquiera corre. En cambio, con sintaxis correcta aún puedes fallar si ocurre una excepción en ejecución. Por eso, lanzar y capturar errores con una estrategia clara es esencial.
¿Cómo usar try, except, else y finally con estrategia?
La captura indiscriminada no es solución. Python promueve bloques try y except para modelar el flujo, pero con precisión: ser específicos con el tipo de error, evitar pass y preferir un solo enunciado dentro de try para aislar fallos.
¿Cuál es la sintaxis mínima de try y except?
Usa try para intentar una acción y except para manejar el error concreto que esperas.
# Ejemplo: división segura def divide(numerador, denominador): if denominador == 0: raise ZeroDivisionError("No se puede dividir entre cero.") return numerador / denominador try: resultado = divide(10, 0) except ZeroDivisionError: print("Operación inválida: denominador en cero.")
¿Cuándo usar else y finally?
Python permite extender el flujo con else y finally para expresar intención: qué pasa si todo sale bien y qué se ejecuta siempre.
try: airplane.takeoff() except TakeoffError: airplane.land() else: print("Despegue exitoso.") finally: airplane.shutdown()
¿Qué jerarquía de errores y ejemplos conviene conocer?
Python usa programación orientada a objetos para su sistema de excepciones. BaseException es la raíz y de ahí derivan errores comunes: EndOfFileError, ImportError, FileNotFoundError, FileExistsError, y ZeroDivisionError, entre otros. Conocerlos te ayuda a ser específico al capturar.
También es buena práctica definir errores específicos de tu aplicación y extender la jerarquía cuando encaja con tu problema.
# Excepción de dominio propia class AppError(BaseException): pass # Uso en flujo de negocio if not condiciones_validas: raise AppError("Reglas de negocio incumplidas.")
¿Has visto errores interesantes en la jerarquía de Python o definidos en algún sistema? Comparte ejemplos y cómo se adaptan a las necesidades del programa que conoces.
Juan Pena Verdú
Tutorial de Errores y excepciones de python en español.
Python2
Python3
Victor Hugo Soria
Gracias por el aporte!
Andres Fernando Campero Orozco
Gracias
Néstor Iván Cepeda Munevar
Errores newbies en python
Jorge Heli Rueda Uribe
Gracias.
Matias Molina
muchas gracias!
Omar Daniel Centeno
Miguel Andres Rendon Reyes
Bro son Builts-in no Builds-in debido a que esta en pasado participio entonces se escribe el Built con t
Wilson Fernando Antury Torres
Daniel Salazar Munoz
ya puedo mostrar programas a los de la oficina sin que salgan errores y sin dar mal percepcion
Santiago Galeano Cadavid
Muy claro, este concepto lo usas en el curso de Ingeniería de Datos con Python y por fin lo entiendo!
David Martínez Jiménez
Esta clase si tiene una explicación demasiado pobre, sin ejemplos y sin demostrar todo el potencial de para que sirve el manejo de errores :(
Sara Galván Ortega
En el curso básico de python hay una clase donde se explica y se profundiza este tema, también hay ejemplos
Perla Godinez Castillo
John Fredy Higuita Porras
try: significa que se ejecuta este código. Si es posible, solo ponemos una sola línea de código ahí como buena práctica except: es nuestro manejo del error, es lo que haremos si ocurre el error. Debemos ser específicos con el tipo de error que vamos a atrapar. else: Es código que se ejecuta cuando no ocurre ningún error. finally: Nos permite obtener un bloque de código que se va a ejecutar sin importar lo que pase.
Mauricio Gonzalez Falcon
Cuando usemos Try: La buena práctica es usar una sola línea de código. Except: Ejecuta esté código cuando hay una excepción. Else: No exceptions? ejecuta esto
De hecho algo que te solicitan como programador de Python suelen solicitar que uses excepciones.
Jose Antonio Rojas Ollarves
Palabras reservadas para manejar un error o excepciones en Python:
try: Permite que un bloque de codigo busque errores . except: Bloque que permite manejar el error . finally: Bloque que permite ejecutar codigo, independientemente del resultado de los bloques try y except
.
IMPORTANTE Para manejar el error debemos conocer el tipo de error que genera o que generara al momento de ejecutarlo . Como conocer el error que genera un codigo: Para hacer saber a la otra persona o a nosotros mismo que tipo de error esta generando el programa podemos hacerlo de igual forma como vemos el tipo de dato que estamos manejando puesto que recuerda que todo en python es un objeto, entonces en este caso pudiesemos aplicar lo siguiente:
Ejemplo:
try: c = int(input("Ingrese un valor: ")) c / 0 except Exception as c: #Con esto estamos evaluando la variable para la excepcion print(type(c)._name) ---> Con esto podemos saber el tipo de el error y el nombre del mismo #ZeroDivisionError --- De esta forma, estaria evaluando el error, por que por ejemplo si le pasamos una cadena de texto, entonces el resultado sera un ValueError
IMPORTANTE Tambien podemos poner otras declaraciones de except, para hacer multiples excepciones dentro de una misma declaracion
Jarod Fernando Fernandez Morales
# Errores y jerarquía de errores
# ======
# Errores y jerarquía de errores
try:
airplane.takeoff()
except TakeOffError as error:
airplane.land()
# ===============
# Errores y jerarquía de errores
try:
Run this code
except:
Execute this code when
there is an exception
else:
No exceptions? Run this code.
finally:
Always run this code.
# ================
Buena práctica
Mala práctica
Juan Pablo Rodríguez Morales
Siguiendo la buena práctica de manejar apenas una línea de error en el try, si en un bloque de código tengo varias instrucciones que pueden generar error ¿Debería anidarlos en los try-else?
Leo OR
y como arreglar los errores de mi vida ? alguien de aqui quieres ser mi socio cofundador quiero construir una red social ?
Alberto Gobbi
(va sin acentos) Consulta: muchas veces podemos manejar los errores a traves de un if siempre que conozcamos los posibles errores, por ejemplo, division entre cero, apuntador nulo, etc. Es mejor manejarlo con IF siempre que se pueda antes que con TRY, o deberiamos dejarle todo al manejador de excepciones?? que se recomienda?
Osmandi Gomez
Hola, es una buena práctica implementar excepciones para hacer catch de un error específico y dar un mensaje o ejecutar una función.
Facundo Nicolás García Martoni
Profesor¡Hola @agobbi! Personalmente trato de capturar siempre los errores con un if, ya que permite una mayor organización del código para los errores pequeños. Si hay un error que no puedo captar con un if statement, usaría sin dudas try/catch
Nicolas Alpargatero
Toca profundizar también para generar warnings
https://docs.python.org/3/library/warnings.html#warning-categories
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
Miguel Angel Reyes Moreno
Los errores deben ser manejados de manera estrátégica.
Jerarquía de errores:
Miguel Andres Rendon Reyes
Atrapamos los errores para que sean controlados.
Jerarquía de clases para las build-in Exceptions:
.
BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration +-- StopAsyncIteration +-- ArithmeticError | +-- FloatingPointError | +-- OverflowError | +-- ZeroDivisionError +-- AssertionError +-- AttributeError +-- BufferError +-- EOFError +-- 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 +-- SyntaxError | +-- IndentationError | +-- TabError +-- SystemError +-- TypeError +-- ValueError | +-- UnicodeError | +-- UnicodeDecodeError | +-- UnicodeEncodeError | +-- UnicodeTranslateError +-- Warning +-- DeprecationWarning +-- PendingDeprecationWarning +-- RuntimeWarning +-- SyntaxWarning +-- UserWarning +-- FutureWarning +-- ImportWarning +-- UnicodeWarning +-- BytesWarning +-- ResourceWarning