No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Manejo de excepciones

33/44
Recursos

Aportes 45

Preguntas 10

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

También hay sentencias en el manejod e errores como else y finally.

try:
    pass
except Exception as e:
    raise
else:
    pass
finally:
    pass

.
El bloque else se ejecuta cuando todo lo del bloque ‘try’ se ejecuta correctamente, es decir, sin excepciones.
.
El bloque finally se ejcuta haya o no excepciones en el bloque ‘try’, es decir, que su ejecución es obligatoria

PRUEBA & ERROR
Cuando se nos presenta un error o una excepción como se le llama en python, el programa se detiene y presenta el error que se presento, pero si utilizamos la excepción try() podemos omitir ese error y continuar con el programa. Esto es de uso fundamental para que el programa no continue con su ejecución por el error y así evitar retrasos en la producción, también de su uso para determinar en los bloques de código si se nos presenta un error poder ser identificado de manera mas facil.

Para qué try sea efectivo podemos utilizar estas declaraciones:

Exception Description
try Permite probar un bloque de código en búsqueda de un error.
except Permite manejar el tipo de error en el bloque.
else Permite ejecutar el código cuando no hay ningún tipo de error en el bloque.
finally Permite ejecutar el código en el bloque, independiente en el resultado de los bloques de prueba y excepción

Las excepciones son errores que se disparan durante la ejecución de un programa. En Python podemos dejar que dichas excepciones detengan el programa o en caso contrario escribir un algoritmo para reaccionar a dicha situación.

  • Los ejemplos más comunes que podemos nombrar de excepciones:

  • Tratar de convertir a entero un string que no contiene valores numéricos.

  • Tratar de dividir por cero.

  • Abrir un archivo de texto inexistente o que se encuentra bloqueado por otra aplicación.

  • Conectar con un servidor de bases de datos que no se encuentra activo.

  • Acceder a subíndices de listas o tuplas inexistentes.

  • Llamada a un método o función inexistente.

  • Importar módulos que no existen.

La captura de excepciones nos permite crear programas mucho más robustos y tolerante a fallas que ocurren en escasas situaciones, pero en caso que se presenten disponemos de un algoritmo alternativo para reaccionar a dicha situación evitando que el programa finalice su ejecución.

La sentencia assert en Python es una forma de verificar que una condición es cierta y, si no lo es, generar una excepción de AssertionError. La sentencia assert se utiliza a menudo para hacer afirmaciones de precondición y postcondición en el código.

La diferencia clave entre la sentencia assert y el manejo de excepciones es que assert es una herramienta para verificar condiciones en el código durante la fase de desarrollo, mientras que el manejo de excepciones es una herramienta para controlar los errores que pueden ocurrir en tiempo de ejecución.

def divide(a, b):
    assert b != 0, "Error: division by zero"
    return a / b

result = divide(10, 2)
print(result)

result = divide(10, 0)
print(result)

En este ejemplo, la función divide realiza una división entre dos números. Antes de realizar la división, se usa la sentencia assert para verificar que el segundo argumento no es cero. Si el segundo argumento es cero, se genera una excepción de AssertionError con un mensaje de error específico.

Cuando se llama a la función con 10 y 2, la división se realiza sin problemas y se muestra el resultado en la consola. Pero cuando se llama a la función con 10 y 0, la sentencia assert genera una excepción de AssertionError, lo que detiene la ejecución del programa y muestra un mensaje de error en la consola.
Preguntenle a ChatGPT cuando con entienden algo, es muy util

Les dejo la estructura completa de una estructura para manejo de excepciones:

try:
		num_two = "1"
    num_two = 2
    sum = num_one + num_two #this statement throws an exception
    print(f"Suma: {sum}")
except TypeError as type_exception:
    print("A TypeError has happend, error: ", type_exception)
except ValueError:
    print("A ValueError has happend")
except Exception as exception:
    print("An exception has happend, error: ", exception)
else:
    print("The code was runned well")
finally:
    print("This code will run en every time")

Manejo de Excepciones

#---------- Manejo de errores --------------

# python detiene la ejecucion al detectar un error
print(1/0)
print('hola')
--> Error division by zero

# Para evitar que el programa se detenga podemos manejar 
# los errores cont try except
try:
  print(0/0)
  assert 1 != 1, 'Uno no es igual a uno'
except ZeroDivisionError as Error:
  print(Error)

print('hola')
--> division by zero
		hola

# assert tiene una funcionalidad que permite lanzar un mensaje
# si no se cumple la condicion
# detiene la ejecucion del programa
assert 1 != 1, 'Uno no es igual a uno'
print('hola nuevamente')
--> Error Uno no es igual a uno

#capturar el error de assert
try:
  assert 1 != 1, 'Uno no es igual a uno'
except AssertionError as error:
  print(error)

print('hola nuevamente')
--> Uno no es igual a uno
		hola nuevamente

# capturar los errores propios para que no detenga el programa
try:
  age = 10
  if age < 18:
    raise Exception('No se permiten menores de edad')
except Exception as error:
  print(error)

print('hola')
--> No se permiten menores de edad
		hola

# capturar varios errores en un mismo bloque
# al conseguir un error detiene el bloque try y continua con
# la ejecucion del programa
try:
  print(0/0)
  assert 1 != 1, 'Uno no es igual a uno'
  age = 10
  if age < 18:
    raise Exception('No se permiten menores de edad')
except ZeroDivisionError as Error:
  print(Error)  
except AssertionError as error:
  print(error)
except Exception as error:
  print(error)

print('hola 2')
--> division by zero
		hola 2
#Manejo de errores manual
def sum(a,b):
  if(a != int or b !=int):
    raise Exception("Erraste")
  else:
    return a + b

try:
  sum("a",3)
except Exception as e:
  print(e)


#Manejo con errores incorporados
def suma(a,b):
	return a + b

try:
	sum("b",3)
except TypeError as e:
	print(e)

Hola!

Les comparto el código de la clase

# Manejo de excepciones
# https://www.w3schools.com/python/python_try_except.asp

'''
Cada que vez que Python encuentra errores, vamos a controlarlo y manejarlo para evitar que se detenga la operacion del programa
'''

'''
# Cualquier error que pase en este bloque, va a ser capturado y podemos manejarlo
try:
  print(0 / 0)
except ZeroDivisionError as error:
  print(error)

try:
  assert 1 != 1, "Uno no es igual que uno"
except AssertionError as error:
  print(error)

# Capturar una excepcion propia
try:
  age = 10
  if age < 18:
    raise Exception("No se permiten menores de edad")
except Exception as error:
  print(error)
'''
# Unificando el manejo de excepciones en un solo bloque
'''
Al unificar los errores en un solo bloque, este se ejecuta hasta que se de la primera excepcion, cuando eso sucede, sale del bloque y continúa ejecutando el resto del programa.
'''
try:
  print(0 / 0)
  assert 1 != 1, "Uno no es igual que uno"
  age = 10
  if age < 18:
    raise Exception("No se permiten menores de edad")
except ZeroDivisionError as error:
  print(error)
except AssertionError as error:
  print(error)
except Exception as error:
  print(error)
  
print("Hola")
print("Hola 2")

OJO:
De la manera que se maneja el bloque final de errores no funcionaria completamente, debido que al ejecutar el primer “except” saltaría continuar con su condición y no terminaría de ejecutar el resto del código, cosa que no queremos.

Quise capturar un SyntaxError y no pude. Busqué información en Internet y encontré estas explicaciones:

You can’t handle invalid syntax in Python like other exceptions. Even if you tried to wrap a try and except block around code with invalid syntax, you’d still see the interpreter raise a SyntaxError.

(Sitio realpython)

You can only catch SyntaxError if it’s thrown out of an eval, exec, or import operation.

...    eval('x === x')
... except SyntaxError:
...    print "You cannot do that"
... 
You cannot do that```

This is because, normally, the interpreter parses the entire file before executing any of it, so it detects the syntax >error before the try statement is executed. If you use eval or its friends to cause more code to be parsed during >the execution of the program, though, then you can catch it.

(StackOverFlow)

assert= Te permite definir condiciones que deban cumplirse siempre. Raice= para hacer excepciones

El Playground de la clase 34 (la siguiente) no sirve 😦 me manda al inicio del curso.

En lugar de utilizar 3 lineas para mostrar cada tipo de error, podemos usar el operador OR (además abajo les agrego mis apuntes) ```python try: print(0/0) assert 1 != 1, 'Uno es igual que uno' age = 10 if age < 18: raise Exception('No se permiten menores de edad') except ZeroDivisionError or AssertionError or Exception as error: print(error) print('hola nuevamente') ''' division by zero hola nuevamente ''' # manejo y control de errores con python # vamos a controlar y manejar los errores y evitar que se detenga el programa print(0/0) print('hola') ''' Traceback (most recent call last): File "/root/Python201/tempCodeRunnerFile.py", line 2, in <module> print(0/0) ZeroDivisionError: division by zero ''' # podemos manejar y controlar el error: try: print(0/0) except ZeroDivisionError as error: # aqui decimos que queremos hacer con el errror # una buena practica para el manejo de errores es hacer tracking o registrar errores en sistema aparte y tener un report e de error , sin tirar el servicio print(error) # aqui puedes gestionar el error de la forma que quieras # si se ejecuto esta linea, aun con el error, por el manejor de error print('hola') ''' division by zero hola ''' assert 1 != 1, 'Uno es igual que uno' # no se imprime esta lina de codigo porque no hay manjeo de excepcion pero si busca el error print('hola') try: assert 1 != 1, 'Uno es igual que uno' except AssertionError as error: print(error) print('hola nuevamente') ''' hola Uno es igual que uno hola nuevamente no detuvo la secuencia del programa y asi podemos capturar otros errores por ejemplo, como capturariamos el propio ''' try: age = 10 if age < 18: raise Exception('No se permiten menores de edad') except Exception as error: print(error) # La ejecucion llega hasta el final ''' pero puede ser cansado poner una linea por tipo de error,para eso podemos poner toda nuestra logica y poner diferentes tipos de errores ''' try: print(0/0) assert 1 != 1, 'Uno es igual que uno' age = 10 if age < 18: raise Exception('No se permiten menores de edad') except ZeroDivisionError as error: print(error) except AssertionError as error: print(error) except Exception as error: print(error) print('hola nuevamente') ''' hola nuevamente division by zero como encuentra un error, no procede con las lineas internas del try pero si continua con las que estan afuera del bloque sin ningun problema ''' try: print(0/0) assert 1 != 1, 'Uno es igual que uno' age = 10 if age < 18: raise Exception('No se permiten menores de edad') except ZeroDivisionError or AssertionError or Exception as error: print(error) print('hola nuevamente') ''' division by zero hola nuevamente ''' ```
Según yo, tengo el código cómo el del maestro, pero solo me funciona el primer except. Qué será, alguno de ustedes sabe algo...
```python try:#se crea un try para aser un error print(0 / 0) assert 1 != 1, 'uno no es igual que uno ' age = 10 if age < 18: raise Exception('no es permitido menores de edada')#se crea un error para menejar los errores except ZeroDivisionError as error:# except se usa para manejar los errrores print(error) except AssertionError as error: print(error) except Exception as error: print(error) print('hola') ```
repositorio <https://github.com/angel20125/python-2-comprehension-functions-2024> ![](https://static.platzi.com/media/user_upload/clase-33-try-except-e57b7020-2181-4d47-90eb-85f3454cd7e6.jpg)
El manejo de excepciones en Python con **try, except y finally** se utiliza para controlar el flujo de un programa cuando ocurren errores o situaciones excepcionales durante la ejecución del código. Aquí te explico cada uno: * **try:** Este bloque contiene el código que puede generar una excepción. Si ocurre una excepción, el flujo del programa se interrumpe y pasa al bloque **except**. * **except:** Este bloque captura y maneja la excepción. Puedes tener varios bloques **except** para manejar diferentes tipos de excepciones. * f**inally:** Este bloque se ejecuta siempre, independientemente de si se produce una excepción o no. Es útil para liberar recursos, como cerrar archivos o conexiones a bases de datos. Además, **assert** se utiliza para establecer una condición que debe cumplirse. Si la condición no se cumple, se genera una excepción AssertionError. Por otro lado, **raise** se utiliza para lanzar una excepción específica, lo que puede ser útil para indicar que algo ha ido mal en el programa. Example: def verificar\_edad(edad):     try:         # Usamos assert para asegurarnos de que la edad sea un número positivo         assert edad >= 0, "La edad no puede ser un número negativo"                  # Si la edad es menor que 18, lanzamos una excepción         if edad < 18:             raise ValueError("La edad debe ser mayor o igual a 18")     except AssertionError as error:         print(f"Error: {error}")     except ValueError as error:         print(f"Error: {error}")     finally:         print("Fin de la verificación de la edad")
Cuando se quiera capturar un error pero no se tenga conocimiento de la excepción que va a generar se puede utilizar las siguientes líneas de código: `try:` ` print(0 / 0)` `except Exception as error: ` ` print("Ocurrió un error => ", error)`
Cuando se quiera capturar un error pero no se tenga conocimiento de la excepción que va a generar se puede utilizar las siguientes líneas de código: ```js try: print(0 / 0) except Exception as error: print("Ocurrió un error => ", error) ```try: print(0 / 0) except Exception as error: print("Ocurrió un error => ", error)
Cuando no se tenga conocimiento del error que va a generar el código se puede utilizar las siguientes líneas: ```js try: print(0 / 0) except Exception as error: print("Ocurrio un error => ", error) ```try: print(0 / 0) except Exception as error: print("Ocurrió un error => ", error)
Cuando no se tenga conocimiento del error que va a generar el código se puede utilizar las siguientes líneas: ```js try: print(0 / 0) except Exception as error: print("Ocurrió un error => ", error) ```try: print(0 / 0) except Exception as error: print("Ocurrió un error => ", error)
Cuando no se tenga conocimiento del error que va a generar el código se puede utilizar las siguientes líneas: `try:` ` print(0 / 0)` `except Exception as error: ` ` print("Ocurrió un error => ", error)`
Me gusto la clase. En un principio se me hizo algo confusa pero fiunalmente entendi el objetivo y se me hace muy util estas funciones.

genial…!

Me gusto el manejo de excepciones. Si aprendi mucho a como implementarlo. Esto es muy util al momento de trabajarlo. Ademas esto permite a mejorar nuestros errores y como podemos mejorar.

El uso de try-expect lo he usado también en programas en ciclos infinitos cuando el usuario ingresa un valor invalido. Aquí el ejemplo: `def obtener_puntos_totales():` ` """` ` Función obtener los puntos totales del curso, maneja entrada de errores` ` para evitar que el programa se rompa` ` """` ` while True:` ` try:` ` puntos_totales = int(input('Ingrese los puntos totales obtenidos en el curso: '))` ` return puntos_totales` ` except ValueError:` ` print('La opción no es valida, por favor intentelo de nuevo')` Entonces en este ejemplo si el usuario no ingresa el dato tipo int valido, da como resultado el ValueError y se repite la ejecución hasta que se consiga el tipo de dato esperado, cuando lo tenga lo retorna y se cancela el ciclo infinito y continua con el código.
# Manejo de excepciones

# https://www.w3schools.com/python/python_try_except.asp

'''
Python detiene la ejecucion al detectar un error, por ejemplo:
print(1/0)
print('hola')
#--> Error division by zero
'''

# Para evitar que el programa se detenga, se puede manejar los errores cont try except, ejemplo:
try:
  print(0/0)
  assert 1 != 1, 'Uno no es igual a uno'
except ZeroDivisionError as Error:
  print(Error)

print('hola')
#--> division by zero


# assert tiene una funcionalidad de permitir lanzar un mensaje de error, si no se cumple la condicion detiene la ejecucion del programa
assert 1 != 1, 'Uno no es igual a uno'
print('hola nuevamente')
#--> Error Uno no es igual a uno

# capturar el error de assert
try:
  assert 1 != 1, 'Uno no es igual a uno'
except AssertionError as error:
  print(error)

print('hola nuevamente')
#--> Uno no es igual a uno

# capturar los errores propios para que no detenga el programa
try:
  age = 10
  if age < 18:
    raise Exception('No se permiten menores de edad')
except Exception as error:
  print(error)

print('hola')
#--> No se permiten menores de edad

# capturar varios errores en un mismo bloque, al conseguir un error detiene el bloque try y continua con la ejecucion del programa
try:
  print(0/0)
  assert 1 != 1, 'Uno no es igual a uno'
  age = 10
  if age < 18:
    raise Exception('No se permiten menores de edad')
except ZeroDivisionError as Error:
  print(Error)  
except AssertionError as error:
  print(error)
except Exception as error:
  print(error)

print('hola 2')
#--> division by zero
```python try: print(0 / 0) assert 1 != 1, 'Uno no es igual que uno' age = 10 if age < 18: raise Exception('No se permiten menores de edad') except ZeroDivisionError as error: print(error) except AssertionError as error: print(error) except Exception as error: print(error) print('Hola') print('Hola 2') ```try:  print(0 / 0)  assert 1 != 1, 'Uno no es igual que uno'  age = 10  if age < 18:    raise Exception('No se permiten menores de edad')except ZeroDivisionError as error:  print(error)except AssertionError as error:  print(error)except Exception as error:  print(error) print('Hola')print('Hola 2')

guardando los errores en un archivo

age = 18
try:
    if age < 18:
        raise Exception('no cumple con la mayoria de edad')
    assert 1 != 1, 'uno es igual a uno'
    print(7/5)
except Exception as error:
    with open('texto.txt', mode='r+',  encoding='utf-8') as file:
        file.read()
        file.write(f'{error} == {time.asctime()} \n')

Me toco ver la clase 2 veces para entender bien que era lo que significaba cada uno

es muy confuso esta clase

Investigue y encontre que exite una opcion finally aqui un ejemplo

try:
    age = 10
    if age < 18:
      raise Exception('Eres muy pequeno')
except Exception as error:

    print("Error: división entre cero.", error)
finally:
    print("Fin del programa")

MANEJO DE EXCEPCIONES


👇🏻 "Te muestro unos ejemplos" 👇🏻


Capturando la excepción lanzada:

try:
    age = 10
    if age < 18:
        raise Exception('No se permiten menores de edad')
except Exception as error:
    print("Error:", str(error))

Definiendo una excepción personalizada:

class MenorEdadException(Exception):
    def __init__(self, mensaje="No se permiten menores de edad"):
        super().__init__(mensaje)

try:
    age = 10
    if age < 18:
        raise MenorEdadException()
except MenorEdadException as error:
    print("Error:", str(error))

Manejo específico de excepciones:

try:
    age = 10
    if age < 18:
        raise Exception('No se permiten menores de edad')
except ValueError:
    print("Error: El valor de edad es inválido.")
except Exception as error:
    print("Error:", str(error))

Aquí tienes un ejemplo básico que muestra el uso de los bloques try, except, else y finally:

try:
    # Código que puede generar una excepción
    resultado = numerador / denominador
except ZeroDivisionError:
    # Manejo específico para división entre cero
    print("Error: No se puede dividir entre cero.")
except Exception as e:
    # Manejo genérico para otras excepciones
    print("Error:", str(e))
else:
    # Código a ejecutar si no se produce ninguna excepción
    print("El resultado es:", resultado)
finally:
    # Código que se ejecuta siempre, independientemente de las excepciones
    print("Fin del programa")

Anotaciones

#  De este modo capturamos los errores sin detener la ejecucion
try:
  print(0/0)
except ZeroDivisionError as error:
  print(error)
  

# assert nos da un segundo parametro para agregar un mensaje de error propio si el codigo no cumple la prueba unitaria. y si lo combinamos con el try,expcept tmbn evitamos que pare la ejecucion del codigo.
try:
  assert 2 > 5, "Dos no es mayor a 5"
except AssertionError as error:
  print(error)

# En este ejemplo aplicamos el try para capturar el error que creamos con el raise e imprimirlo sin parar la ejecucion.

age = 10
try:
  if age < 18:
    raise Exception("No se permiten menores de edad") 
except Exception as error:
  print(error)
  
print("hola")

# Para capturar errores no es necesario hacer un try para cada uno de ellos, basta con usar un solo try, y agregar el numero de excepciones que necesitemos para capturar cada tipo de error de forma independiente.
try:
  print(0/0)
  assert 2 > 5, "Dos no es mayor a 5"
  if age < 18:
    raise Exception("No se permiten menores de edad")
    
except ZeroDivisionError as error:
  print(error)
except AssertionError as error:
  print(error)
except Exception as error:
  print(error)

Super. Ya me imaginé un módulo para los errores personalizados y tener mejor orden de ellos. Yo creo que el profe seguirá profundizando en esto. Igual la documentación es clara.

Es vital el manejo de excepciones ya que podrias almacenar los errores en logs dentro de una base de datos o archivos y asi ver un historial de donde a fallado y ayuda mucho a detectar de manera mas facil que puede estar pasando

try:
  print(resume)
  except NameError as error:
    print(error)
  
    assert 1 != 1, 'Uno no es igual que uno'
  except AssertionError as error:
    print(error)
    age = 10
    if age > 18:
      raise Exception('No se permiten menores de edad')
  except Exception as error:
    print(error)

print(3)

Este manejador que se plantea acá no funciona completamente.

Supongamos el siguiente código

try:
    x = 0/0
    assert 1 != 1
    print("nombre:"+nombre)
except ZeroDivisionError as error:
    print(error)
except AssertionError as error:
    print(error)
except NameError as error:
    print(error)

En este caso, encontramos 3 errores en el try; sin embargo solo se captura ZeroDivisionError, lo que necesariamente significa que se captura el error pero la ejecución no continua para llegar al siguiente error.

¿Alguna idea para lograrlo?

Usé try-except en la clase de iterables:

for i in range(1, 10):
  print(i)

my_iter = iter(range(1, 4))

try:
    print(my_iter)
    print(next(my_iter))
    print(next(my_iter))
    print(next(my_iter))
    print(next(my_iter))
except:
    print('la iteración alcanzó su límite')

print(1/3)

Resumen: Manejo de excepciones

  • Una excepción en Python es un evento inesperado que puede ocurrir durante la ejecución de un programa
  • Interrumpe su flujo normal.
  • El manejo de excepciones permite al programador controlar cómo se maneja este evento y evitar que el programa se detenga de manera abrupta.

vengo de javascript, y allí me parece mas fácil manejar los errores ya que no es necesario especificar el tipo de error

try:
    print(0/0)
except ZeroDivisionError as error:
    print(error)

try:
    assert 1!=1,"Uno no es igual a 1" #Si no ponemos mensaje, no saldra nada
except AssertionError as error:
    print(error) 

#assert 1!=1,"Uno no es igual a 1"
#Se produce la excepcion y lanza ese mensaje

try:
    edad=10
    if edad<18:
        raise Exception("No se permite menores de edad")
#Como no tiene nombre la excepcion creada, se captura como excepcion
#solamente
except Exception as error:
    print(error)
    
#Juntando todo en uno
try:
    print(0/0)
    assert 1!=1,"Uno no es igual a 1"
    edad=10
    if edad<18:
        raise Exception("No se permite menores de edad")

except ZeroDivisionError as error:
    print(error)
except AssertionError as error:
    print(error) 
except Exception as error:
    print(error)
#Si captura una excepcion el resto del try ya no lo ejecuta
print("Hola")

try:
  print(0/0)
  assert 1 != 1, 'Uno no es igual a uno'
  age = 10
  if age < 18:
    raise Exception('No se permite menores de edad')
except ZeroDivisionError as error:
  print(error)
except AssertionError as error:
  print(error)
except Exception as error:
  print(error)

print('Hola')
print('Hola 2')

Ahora ya se como utilizar el try-except !