A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Manejo de excepciones

28/31
Recursos

Aportes 129

Preguntas 23

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Excepciones comunes:
ImportError : una importaci贸n falla;
IndexError : una lista se indexa con un n煤mero fuera de rango;
NameError : se usa una variable desconocida ;
SyntaxError : el c贸digo no se puede analizar correctamente
TypeError : se llama a una funci贸n en un valor de un tipo inapropiado;
ValueError : se llama a una funci贸n en un valor del tipo correcto, pero con un valor inapropiado

Les dejo mis apuntes https://github.com/karlbehrensg/introduccion-pensamiento-computacional

Manejo de excepciones
Los manejos de excepciones son muy comunes en la programaci贸n, no tienen nada de excepcional. Las excepciones de Python normalmente se relacionan con errores de sem谩ntica, tambi茅n podemos crear nuestras propias excepciones, pero cuando una excepci贸n no se maneja (unhandled exception), el programa termina en error.

Las excepciones se manejan con los keywords: try, except, finally. Se pueden utilizar tambi茅n para ramificar programas.

No deben manejarse de manera silenciosa (por ejemplo, con print statements). Para crear tu propia excepci贸n utiliza el keyword raise.

"""Creamos una funci贸n en donde cada elemento de 
una lista es dividida por un divisor definido"""
def divide_elementos_de_lista(lista, divisor):
    """El programa intentara realizar la divisi贸n"""
    try:
        return [i / divisor for i in lista]
    
    """En caso de error de tipo ZeroDivisionError que
    significa error al dividir en cero, el programa
    ejecutara la siguiente instrucci贸n"""
    except ZeroDivisionError as e:
        return lista

lista = list(range(10))
divisor = 0

print(divide_elementos_de_lista(lista, divisor))

Un aspecto importante para un buen manejo de excepciones, es conocer la jerarqu铆a en el 谩rbol de excepciones de Python:

Esta imagen les puede ayudar 馃槃

basado en y 隆Suerte!

#All possible errors

except TypeError:
    print("is thrown when an operation or function is applied to an object of an inappropriate type.")
except IndexError:
   	print("is thrown when trying to access an item at an invalid index.")
except KeyError:
    print("is thrown when a key is not found.")
except ImportError:
  	print("Raised when the imported module is not found.")
except StopIteration:
  	print("is thrown when the next() function goes beyond the iterator items.")
except ValueError:
  	print("is thrown when a function's argument is of an inappropriate type.")
except NameError:
  	print("is thrown when an object could not be found.")	
except ZeroDivisionError:
  	print("is thrown when the second operator in the division is zero.")
except KeyboardInterrupt:
  	print("is thrown when the user hits the interrupt key (normally Control-C) during the execution of the program.")
except MemoryError:
  	print("Raised when an operation runs out of memory.")
except FloatingPointError:
  	print("Raised when a floating point operation fails.")
except OverflowError:
  	print("Raised when the result of an arithmetic operation is too large to be represented.")
except ReferenceError:
  	print("Raised when a weak reference proxy is used to access a garbage collected referent.")
except TabError:
  	print("Raised when the indentation consists of inconsistent tabs and spaces.")
except SystemError:
  	print("Raised when the interpreter detects internal error.")
except RuntimeError:
  	print("Raised when an error does not fall under any other category.")
except:
 	print("Error detected can't be handled nor clasified.")

Silenciar excepciones o como dec铆an en mi trabajo鈥 Programaci贸n Orientada a Excepciones Vac铆as
jajajajaa

Con recursividad鈥

def divide_elementos_de_lista(lista, divisor):
    try:
        return [i / divisor for i in lista]
    except ZeroDivisionError as e:
        print(e)
        divisor = int(input('Ingresa un divisor diferente cero: '))
        return divide_elementos_de_lista(lista, divisor)

lista = list(range(10))
divisor = 0

print(divide_elementos_de_lista(lista, divisor))

Lo hice con la ra铆z cuadrada.Aprend铆 a traer la funci贸n que hace esa operaci贸n

import math 
def raiz_cuadrada_elementos_lista(lista, multiplicador):
    try:
        return [math.sqrt(i*multiplicador) for i in lista]
    except ValueError as e:
        print (e)
        return f'no existe la ra铆z cuadrada de un negativo'    

lista = list(range(10))
multiplicador = -8

print (raiz_cuadrada_elementos_lista(lista, multiplicador))```

mi c贸digo generado con buenas pr谩cticas:

隆Informaci贸n adicional!
Funcionamiento de try

  1. El bloque de c贸digo del try es ejecutado.
  2. Si no ocurre una excepci贸n, el except se pasa por alto y el try se termina.
  3. Si ocurre una excepci贸n durante el bloque de c贸digo del try, dejar谩 de correr ese bloque y pasar谩 el except. Si existe un match entre la excepci贸n ocurrida y la declarada en except, el bloque del except es ejecutado. Luego sigue la ejecuci贸n com煤n del programa.
  4. Si no hay match, se deriva a un try integrado. Si no existe manejador de esta excepci贸n, el programa se detendr谩 porque se trata de una unhandled expression mostrando el mensaje del error.
    Varias excepciones en un except
    Los except pueden recibir varias excepciones en forma de tupla, por ejemplo:
... except (RuntimeError, TypeError, NameError):
...     pass

else en sentencia try

La sentencia try acepta un else que se usar谩 cuando se deba ejecutar c贸digo si el try no encuentra ninguna excepci贸n:

for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except OSError:
        print('cannot open', arg)
    else:
        print(arg, 'has', len(f.readlines()), 'lines')
        f.close()

#Resumen de la leccion

#Manejo de Excepciones

#Definici贸n: Si el resultado de la funcion es un error, el ejecuta un segmento de codigo.
#Entre los cuales se puede poner el error para verlo m谩s facilmente. Esto evita que nuestro programa deje de funcionar cuando se encuentre con estos errores.

def divide_elementos_de_lista(lista, divisor):
    try:
        return [i / divisor for i in lista]
    except ZeroDivisionError as e:
        print(e)
        return lista

lista = list(range(10))
divisor = 0

print(divide_elementos_de_lista(lista, divisor))

Este es un reto personal tratando de implementar algunas de las herramientas que eh aprendido de este curso incluyendo manejo de excepciones.

import unittest

def informacion_grado_de_estudiante():
    notas_examen_y_participacion = {2:85, 3:80, 3:90}
    return notas_examen_y_participacion
    
    
def notas_de_examen():
    examen = 0
    for i in informacion_grado_de_estudiante().keys():
        examen += i
    return examen / len(informacion_grado_de_estudiante())


def notas_de_participacion():
    participacion = 0
    for i in informacion_grado_de_estudiante().values():
        participacion += i
    return participacion / len(informacion_grado_de_estudiante())


def notas_de_estudiantes():
    notas_de_estudiantes = notas_de_examen() + notas_de_participacion()
    return notas_de_estudiantes
    
    
def average_de_estudiantes():
    return notas_de_estudiantes() / 2


class CajaNegraTest(unittest.TestCase):
        def test_notas_de_estudiantes(self):
            print(f'The student average grade is {average_de_estudiantes()}')
            try:
                self.assertGreaterEqual(average_de_estudiantes(), 50)
            except AssertionError as e:
                print(e)
if __name__=='__main__':
    unittest.main()


Las formas en las que explotan los programas, cuando no tenemos un cuidadoso manejo de excepciones, puede llevar incluso a la corrupci贸n de los datos que son registrados en las bases de datos.

Falto mencionar que finally se usa para ejecutar algo haya o no un error.

<h3>Explicaci贸n de la clase en c贸digo</h3>
"""Excepciones:
鈥 Son muy comunes en programaci贸n. No tienen nada de excepcional.
鈥 Las excepciones de Python normalmente son errores de sem谩ntica.
鈥 Se pueden crear excepciones propias.
鈥 Cuando una excepci贸n no se maneja (unhandled exception / excepci贸n no controlada ), 
    el programa termina en error.
鈥 Las excepcione se manejan con palabras reservadas: try, except, finally.
鈥 Se pueden utilizar para ramificar programas, crear condicionales.
鈥 No se debe manejar las excepciones con prints por consola, solamente.
鈥 Para crear una excepci贸n se utiliza la palabra reservada "raise".
"""

"""Excepciones Comunes:
鈥 ImportError: una importaci贸n falla.
鈥 IndexError: una lista se indexa con un n煤mero fuera de rango.
鈥 NameError: se usa una variable desconocida.
鈥 SyntaxError: el c贸digo no se puede analizar correctamente.
鈥 TypeError: se llama a una funci贸n en un valor de un tipo inapropiado.
鈥 ValueError: se llama a una funci贸n en un valor del tipo correcto, 
    pero con un valor inapropiado
"""

#PROGRAMA COMO EJEMPLO DE EXPECIONES
"""Creamos una funci贸n en donde cada elemento de 
una lista es dividida por un divisor definido"""
def divide_elementos_de_lista(lista, divisor):
    try: #Se refiere a con lo que vamos a tratar.
        return [i / divisor for i in lista]

    except ZeroDivisionError as e:
        """En la excepci贸n de que ocurra un error de querer dividir por 0, entonces
        devuelve la lista. Except ayuda a que el programa no se caiga a pesar de
        que ocurri贸 un error."""
        print(e)
        return lista

    finally:
        print('El try (tratamiento) ya termin贸.')
        """finally se utiliza cuando el try (tratamiento) termin贸, sin importar
        si hay un error o no."""


lista = list(range(10))
divisor = 0

print(divide_elementos_de_lista(lista, divisor))

print("""
Vamos con otro ejemplo, ahora usando la keyword 'raise':""")

numero = 4
objetivo = 9

if numero < objetivo:
    raise Exception(f'隆{numero} es menor a {objetivo}!')

Notas 馃槂
Manejo de excepciones

  • Es cuando ocurre un error en nuestro c贸digo. Son muy comunes en la programaci贸n. No tienen nada de excepcional.
  • Las excepciones de Pthon normalmente se relacionan con errores de sem谩ntica.
  • Se pueden crear excepciones propias.
  • Cuando una excepci贸n no se maneja (unhandled exception) el programa termina en error.
  • Las excepciones se manejan con los keywords: try, except, finally.
  • Se pueden utilizar tambi茅n para ramificar programas.
def divide_elementos_de_lista(lista, divisor):
    try: 
        return [i/divisor for i in lista]
    except ZeroDivisionError as e:
        print(e)
        return lista

lista = list(range(10))
divisor = 0

print(divide_elementos_de_lista(lista, divisor))
  • No deben manejarse de manera silenciosa (por ejemplo, con print statements).
  • Para aventar tu propia excepci贸n utiliza el keyword raise.

Manejo de excepciones
Son muy comunes en la programaci贸n. No tienen nada de excepcional.
Las excepciones de Python normalmente se relacionan con errores de sem谩ntica.
Se pueden crear excepciones propias.
Cuando una excepci贸n no se maneja (unhandled exception), el programa termina en error.
驴C贸mo manejas las excepciones?
keywords: try, except, finally.
Se pueden utilizar tambi茅n para ramificar programas.
No deben manejarse de manera silenciosa (por ejemplo con print statements)
Para aventar tu propia excepci贸n utilizar el keyword raise.

Ya casi llego Data Tree Gardener 馃槃

Hay que entender que son much铆simas excepciones y que cada una se tiene que escribir expl铆citamente, porque, de no hacerlo, muchas veces el programa no entiende que intentas hacer.

comparto la documentaci贸n sobre excepciones en Python https://docs.python.org/3/library/exceptions.html

Les comparto los apuntes de esta clase:

Clase 28, manejo de excepciones

  • Son muy comunes en la programaci贸n. No tienen nada de excepcional.
  • Las excepciones de Python normalmente se relacionan con errores de sem谩ntica.
  • Se pueden crear excepciones propias.
  • Cuando una excepci贸n no se maneja (unhandled exception), el programa termina en error.

Manejo de excepciones:

  • Se manejan con los keywords: try, except, finally.
  • Se pueden utilizar para ramificar programas, no solo para errores.
  • No deben silenciarse las excepciones, usando try y except e imprimir a la consola. Ejemplo, con print statements.
  • Para aventar tu propia excepci贸n utiliza el keyword raise.

No se pueden manejar los errores con if? por ejemplo si existe el error mostrar un tipo de flash?

Si dejan el except solo, cpturara todos los errores qeu puedan haber.

Buenas tardes.
Me qued贸 una duda en el primer ejemplo, con divisor=2.
驴Por qu茅 los resultados son n煤meros flotantes?
Pens茅 que hab铆a que avisar cuando un n煤mero va a ser float.
Gracias

El manejo de excepciones se hace mediante los bloques que utilizan las sentencias try, except y finally.

Dentro del bloque try se ubica todo el c贸digo que pueda llegar a levantar una excepci贸n, se utiliza el t茅rmino levantar para referirse a la acci贸n de generar una excepci贸n.

A continuaci贸n se ubica el bloque except, que se encarga de capturar la excepci贸n y nos da la oportunidad de procesarla mostrando por ejemplo un mensaje adecuado al usuario.

Que son las excepciones: Las excepciones son cuando suceden errores en tu codigo

* Son muy comunes en la programacion. No tienen nada de exepcional
* Las excepciones de Python normalmente se relacionan con errores de semantica
* Se pueden crear excepciones propias
* Cuando una excepcion no se maneja (unhandlead excepcion) el programa termina en error

Manejo de excepciones:

* Las excepciones se manejan con keywords:

	* try: Permite que un bloque de codigo busque errores
	* except: Permite que el bloque de codigo maneje el error
	* finally:  Permite ejecutar codigo, independientemente del resultado de try y except
* Se pueden utilizan tambien para ramificar programas
* No deben manejarse de manera silenciosa (por ejemplo, con print statements)
* Para aventar tu propia exepcion utiliza el keyword

	* raise

Excepciones comunes:

* ImportError: una importaci贸n falla;
* IndexError: una lista se indexa con un n煤mero fuera de rango;
* NameError: se usa una variable desconocida ;
* SyntaxError: el c贸digo no se puede analizar correctamente
* TypeError: se llama a una funci贸n en un valor de un tipo inapropiado;
* ValueError: se llama a una funci贸n en un valor del tipo correcto, pero con un valor inapropiado

Manejo de Excepciones

Son muy comunes en la programaci贸n. no tienen nada de excepcional.

Las excepciones de python normalmente se relacionan con errores de semantinca

Se pueden crear excepciones propias

Cuando una excepci贸n no se maneja(unhandled exception), el programa termina en error

Este ejemplo nos muestra la division de la siguiente funcion dividida entre 2

cuandro la dividimos entre 0 nos sale este error

cuando ponemos la funcion try}}

nos protege de cualquier error para el error ZerodivicionError

estos nos protege o avisa de cualquier error

Les comparto la documentaci贸n oficial de Python sobre manejo de excepciones, espero les ayuden. les recomiendo tenerla siempre presente para interpretar mejores los errores y damos con la soluci贸n mas r谩pido
https://docs.python.org/es/3/library/exceptions.html

De hecho, si quieres tener un poco de control con las excepciones en producci贸n, siempre puedes manejar un archivo que sea una especie de log que lleve un registr贸 de qu茅 errores han sucedido y en d贸nde, tambi茅n al manejar una excepci贸n dentro de una funci贸n es bueno lanzar una alerta para que el usuario de la funci贸n sepa cual fue el error y pueda hacer algo al respecto ^^

'''Al momento de poner el cero, nos arroja un error ZeroDivisionError
de tal manera que, usamos una excepci贸n.

As铆 que corre el programa normalmente, excepto cuando el numero sea cero, 
en ese caso solo muestrame la lista'''


def divide_elementos(lista, divisor):
    try:
        return [l / divisor for l in lista]
    except ZeroDivisionError as e:
        return lista

lista = list(range(10))
divisor = int(input('Escribe un numero: '))

print(divide_elementos(lista, divisor))

驴Cu谩ndo conviene hacer excepciones a diferencia de proteger el c贸digo?
Me refiero que en el ejemplo de la clases, sin saber excepciones yo hubiera hecho algo as铆:
Resultado: [i/divisor for i in Lista if divisor>0]

excelente explicado

Las excepciones son casos particulares que pueden ocurrir dentro del flujo de datos y procesos de mi c贸digo. Se pueden generar cuando se ingresan par谩metros no esperados dentro de las variables, los cuales pueden provocar errores al aplicar en dichos par谩metros las operaciones definidas en el c贸digo.

Para evitar dichos errores, existen las excepciones. Para utilizarlas desde la 鈥減rogramaci贸n defensiva鈥 simplemente se incluyen lineas de c贸digo en las cuales por medio de keywords como try, except, finally, especificando el caso particular para el cual se aplicar谩 esa excepci贸n (es decir, no se seguir谩 el flujo normal del proceso u operaciones sobre esos par谩metros/variables ante determinado valor especifico). En su lugar, se presentar谩 un mensaje predeterminado o un grupo de par谩metros sin ser alterados por las operaciones establecidas en el c贸digo.

Excelente clase

def divide_elementos_de_lista(lista, divisor):

    try:

        return [i / divisor for i in lista]

    except ZeroDivisionError as e:
        print(e)
        return lista

lista = list(range(10))
divisor = 0
print(divide_elementos_de_lista(lista, divisor))```

Que bueno que el manejo de excepciones es muy similar a los dem谩s lenguajes de programaci贸n!!!

Lo hab铆a manejado toda mi vida con if, no sabia de esta parte.
Que cool!!!

Confirmo!! un d铆a, en los 煤ltimos 10 minutos de sue帽o, literal, so帽e la soluci贸n de un bug en el que ya hab铆a gastado horas. Y s铆, si era la soluci贸n. Un enigma!!

Team no termino de entender el concepto de 鈥渟ilenciar las excepciones鈥. Se dice que es una mala pr谩ctica, pero que acaso al final de la clase no estamos usando try y **except ** para imprimir el error?
Alguna sugerencia para entender mejor esto?

Agregue la excepci贸n TypeError 馃槂

def divide_elementos_de_lista(lista, divisor):
    try:
        return [i / divisor for i in lista]
    except ZeroDivisionError as e:
        print(f"Error al dividir por 0: {e}")
        return lista
    except TypeError as e:
        print(f"Error tipo de dato erroneo: {e}")
        return lista


def run():
    lista = list(range(10))
    # divisor = 0
    # divisor = "f"
    divisor = 2
    print(divide_elementos_de_lista(lista, divisor))


if __name__ == '__main__':
    run()



def divide_elementos_de_lista(lista, divisor):
    try:
        return [i / divisor for i in lista]
    except ZeroDivisionError as e:
        print(e)
        return lista


lista = list(range(10))
divisor = 0

print(divide_elementos_de_lista(lista, divisor))

Manejo de excepciones:
馃馃馃
Los manejos de excepciones son muy comunes en la programaci贸n, no tienen nada de excepcional. Las excepciones de Python normalmente se relacionan con errores de sem谩ntica, tambi茅n podemos crear nuestras propias excepciones, pero cuando una excepci贸n no se maneja (unhandled exception), el programa termina en error.
馃
Las excepciones se manejan con los keywords: try, except, finally. Se pueden utilizar tambi茅n para ramificar programas.
馃
No deben manejarse de manera silenciosa (por ejemplo, con print statements). Para crear tu propia excepci贸n utiliza el keyword raise.

hola comunidad!!!
Estoy usando VScode como editor para este curso pero estoy teniendo muchos problemas con mi c贸digo, ya que me marca muchos errores de indentacion, busque en internet pero sigo sin poder solucionarlo, se que es un problema con el tab y los espacios, pero no se si exista alg煤n pluggin o configuraci贸n para ya no tener estos problemas:

File 鈥excepsions.py鈥, line 4
except ZeroDivisionError as e:
^
IndentationError: unindent does not match any outer indentation level

no es la primera vez que em ocurre este error y me estoy atorando mucho en el curso.
espero me puedan ayudar.
gracias.

Me gust贸 la clase, pero si no pudieron entender aqu铆 les dejo un v铆deo que de seguro os ayudar谩: link

Errores y excepciones


鈥 鈥忊忊
Existen dos tipos diferentes de errores dentro de python: errores de sintaxis y excepciones.

鈥 鈥忊忊

Errores de sintaxis:

Los errores de sintaxis, tambi茅n conocidos como los errores de interpretaci贸n, son quiz谩s el tipo de error m谩s com煤n cuando a煤n estas aprendido sobre Python:
鈥 鈥忊忊

El int茅rprete se帽ala la l铆nea responsable del error e indica una peque帽a flecha, que apunta al lugar donde se detect贸 el error. En este caso el error es porque faltar铆a antes del print() los dos puntos (' : '). Adem谩s se muestran el nombre del archivo y el n煤mero de la l铆nea a con posterioridad consultar.

鈥 鈥忊忊

Excepciones:

Los errores detectados despu茅s de pasar la prueba de sintaxis pero durante la ejecuci贸n del programa se llaman excepciones o errores l贸gicos. Por ejemplo, este tipo de errores pasan desde dividir un n煤mero por 0 hasta la importaci贸n de un m贸dulo inexistente. Estas excepciones necesitan ser manejadas por el programa, de no hacerlo, y siendo esta incapacidad del programa mayoritaria en los casos, dan como output mensajes de error como los siguientes:
鈥 鈥忊忊

La 煤ltima l铆nea en cada >>> detalla el error que surgi贸. Las excepciones son de diferentes tipos y el tipo de excepci贸n se imprime como parte del mensaje: los tipos en el ejemplo son ZeroDivisionError, NameError y TypeError: estos nombres de errores son identificadores integrados, no keywords.
鈥 鈥忊忊
Referencias

<h3>Manejo de excepciones</h3>
  • Una excepci贸n es cuando sucede un error en el c贸digo.
  • Son muy comunes en la programaci贸n. No tienen nada de excepcional.
  • Las excepciones de Python normalmente se relacionan con errores de sem谩ntica.
  • Se pueden crear excepciones propias.
  • Cuando una excepci贸n no se maneja (unhandled exception), el programa termina en error.

  • Las excepciones se manejan con los keywords: try, except, finally.
  • Se pueden utilizar tambi茅n para ramificar programas.
  • No debe manejarse de manera silenciosa (por ejemplo, con print statements).
  • Para arrojar tu propia excepci贸n utiliza el keyword raise.

<h4>Excepciones comunes</h4>
  • ImportError: Una importaci贸n falla.
  • IndexError: Una lista se indexa con un n煤mero fuera de rango.
  • NameError: Se usa una variable desconocida.
  • SyntaxError: El c贸digo no se puede analizar correctamente.
  • TypeError: Se llama a una funci贸n en un valor de un tipo inapropiado.
  • ValueError: Se llama a una funci贸n en un valor del tipo correcto, pero con un valor inapropiado.
  • ZeroDivisionError: Dividir entre 0.
try:
	# tu c贸digo
except:
	# En caso de error 
else:
	# si no hay error coore otro c贸digo
finally:
	# corre el c贸digo sin errores o con errores

Las Excepciones son a Python como el SI.ERROR es a Excel.

def divide_elementos_de_lista(lista, divisor):
    try:
        return [i / divisor for i in lista]
    except ZeroDivisionError as e:
        print(e) #e representa el error que incluye la excepci贸n ZeroDivisionError
        return lista

lista = list(range(10))
divisor = 0

print(divide_elementos_de_lista(lista, divisor))

Gracias por el aporte.

[0:45] La mayoria de las excepciones se relacionan con errores de sem谩ntica. Por ejemplo las de tipo, de divisi贸n, operaciones que no son compatibles, etc.

[1:04] Se pueden crear excepciones propias. Cuando una excepci贸n no se maneja (unhandled exception), el programa termina en error.

Manejo de excepciones: son muy comunes en la programaci贸n. No tienen nada excepcional.

En JS no da error dividir por 0 por el contrario da la respuesta matem谩tica: infinito

Las Excepciones son una estructura de control que implementan ciertos lenguajes de programaci贸n con el objetivo de manejar condiciones 鈥渁normales鈥 o no esperadas dentro del programa que normalmente impedir铆an el continuo desarrollo del programa, pero que pueden ser tratados en el mismo curso del programa.

Una buena practica para evitar errores, a pensar en posibles fallos

cual es la diferencia entre usar
return [i/divisor for i in lista]
y
for i in lista
	yield i/divisor

[1:11] Las excepciones se manejan con tres keywords nuevos: try, except, finally.

[1:59] Una p茅sima practica es silenciar tus excepciones, es decir que en lugar de manejar el error lo imprimes a la consola.

[4:44] Para manejar una excepci贸n tenemos dos opciones, podemos poner el try except fuera de la funci贸n, o ponerlo dentro y hacer algo de programaci贸n defensiva: yo se que voy a dividir y un error muy comun es que alguien envie un cero.

vaya hasta 1 semana tratando de solucionar un bug!!!

def divide_elementos_de_lista(lista, divisor):
    try:
        return [i / divisor for i in lista]
    except ZeroDivisionError as e:
        print(e)
        return lista


lista = list(range(10))
divisor = 0 #divisor de entrada

print(divide_elementos_de_lista(lista, divisor))```

El keyword finally se usa generalmente para liberar fuentes externas (Archivos, Interfaces, Servers, Etc鈥)

Por ejemplo:

try:
   f = open("test.txt")
   # Operaciones con el archivo
finally:
   f.close()

Alguien conoce otro uso?

Y 鈥渇inally鈥 d贸nde queda?

Clave: Siempre pensar en los caminos malos, con errores, fallas para asi defender tu algoritmo y hacerlo robusto.

try para tener un retorno del erro
except para una exception

Cuando no manejas las excepciones: Resplandor y hace pum!

Nunca hab铆a entendido el try hasta ahora. Muy buena clase!

Muy buena clase.

Muy bueno!

Esto se me ocurre que puede ser 煤til cuando est谩s haciendo un programa de an谩lisis de datos, en mi caso de energ铆a.

Por las noches obtienes cero de generaci贸n.

Yo entiendo que las excepciones son acciones con ciertos parametros que hacen que tengan error justo en ese espacio,
Algo asi como la singularidad en fisica no? Todo el universo funciona de manera ordenada pero cuando se llega a los agujeros negros las ecuaciones fallan.

Corrijanme si me equivoco porfavor

Buena herramienta las execepciones. i3

def divide_elementos_de_la_lista(lista, divisor):
    try:
        return[i/divisor for i in lista]
    except ZeroDivisionError as e:
        print(e)
        return lista

lista =list(range(10))
divisor=1
print(f'elementos: {divide_elementos_de_la_lista(lista,divisor)}')

En qu茅 otros casos se manejan las excepciones?

C贸digo con buenas pr谩cticas explicadas en clase:

el manejo de errores es muy importante tener en cuenta y mas cuando el proyecto cada vez va escalando mas

def division_de_lista(lista, divisor):
    try:
        return [i / divisor for i in lista]
    except ZeroDivisionError as e:
        print(e)
        return lista


lista = list(range(10))
divisor = 0

print(division_de_lista(lista, divisor))

def divide_elementos_lista(lista,divisor):
try:
return [i/divisor for i in lista ]
except ZeroDivisionError as e:
print(e)
return lista

lista=list(range(10))
divisor=0

print(divide_elementos_lista(lista, divisor))

Muy importante lo del manejo de exepciones, durante mi experiencia me he dado cuenta que hay excepciones que pueden llegar a tumbar el servidor o dejar sin recursos la memoria del servidor y mas a煤n cuando implican la gesti贸n de un archivo o la gesti贸n de una base de datos.

Ademas hubiera sido muy gratificante que el profesor hubiera dado un ejemplo de como hacer excepciones propias para este lenguaje.

def divide_list_elements(list,dividend):
    try:
        return [i/dividend for i in list]
    except ZeroDivisionError as e:
        return list


data_list = list(range(5))
zero = 0
two = 2

print(divide_list_elements(data_list,two))
print(divide_list_elements(data_list,zero))

porque cuando hago la division por 1 me da como resultado 1.0 , 2.0 , 3.0 鈥
y cuando lo hago divisor por cero me da 1, 2, 3 鈥

鈥溾濃淐reamos una funcion en donde cada elemento de la lista
lo divide un elemento unico鈥""

def divide_elementos_de_lista(lista,divisor):
return [i / divisor for i in lista]

lista = list(rnage(10))
divisor = 0

print (divide_elementos_de_lista(lista,divisor))

Fundamental que manejemos excepciones en nuestros programas particularmente cuando trabajamos en grupos de trabajo.

Programaci贸n defensiva

Manejo de excepciones:

  • Manejo de los errores del codigo
  • Son muy comunes el la programacion
  • La moyoria de excepciones por defecto son de semantica (tipo, division, operaciones incompatibles, etc)
  • Podemos crear nuestras propias excepciones
  • Si la excepciones no se manejan el programa termina

keywords de manejo de excepciones:

  • Se manejan con los keywords: try, except, finally.
  • Estos keywords pueden ramificar programas
  • Para generar tus propias excepciones se usa el keyword raise

Nota:
Es mala practica silenciar las excepciones (ejemplo imprimirlas en consola)

Sintaxis:
-try/exept

try:
	<expresiones>
except <nombre_error> as <variable>:
	<expresiones_caso_error>

-raise:

raise <nombre_error> ("<mensaje>")

Cuando hablamos de excepciones en programaci贸n, pasa todo el tiempo x.x y dependiendo del lenguaje, en Python normalmente son en sem谩ntica. Y hasta podemos crear Excepciones propias. Pero habr谩 que tener cuidado para que el programa no termine en error.

Manejo de excepciones

  • Se maneja con try, except y finally.
  • Se pueden utilizar para ramificar programas.
  • No deben manejarse de manera silenciosa, es decir con Print Statemens, recuerda que esto es para buscar bugs no para taparlos
  • Para lanzar tu propia excepci贸n utiliza raise.
#este es un programa normal que divide entre dos todos los elementos de una lista
#lo el problema viene cuando divisor = 0 porque en Python eso nos regresa error
#cuando corre y nos regresa el error en consola responde con el nombre del error
#en este caso el nombre del error es ZeroDivisionError

#la idea aqui es poder utilizar try y except para manejar el error
#es muy parecido a una promesa
def divide_elementos_de_lista(lista, divisor):
	return [i / divisor for i in lista]

lista = list(range(10))
divisor = 0
#divisor = 2
print(divide_elementos_de_lista(lista, divisor))
#usamos try para correr nuestro mensaje por defecto pero en el caso de que sea
#regresado un error pues ser谩 manejado por except
def divide_elementos_de_lista(lista, divisor):
  try:
    return [i / divisor for i in lista]
	
  #en except decimos que en caso de recibir este error, regresaremos la lista
	#que obtuvimos al principio, es decir lista
	#con fines didacticos impimimos el error en consola para verlo
  except ZeroDivisionError as error:
    print(error)
    return lista

lista = list(range(10))
divisor = 0
print(divide_elementos_de_lista(lista, divisor))

Hola comunidad! alguien que me pueda orientar en como corregir esto en mi c贸digo se lo agradecer铆a mucho

Ac谩 mi versi贸n del c贸digo!

def division(lista, divisor):
    try:
        return [i / divisor for i in lista]
    except ZeroDivisionError as error:
        print(f'The error is: {error}')
        return lista

if __name__ == '__main__':
    lista = list(range(10))
    divisor = int(input('Escribe un numero: '))

    print(division(lista, divisor))

Este c贸digo para pedir un numero al usuario usa try/except para capturar una excepci贸n de tipo ValueError en caso de que no se introduzca un entero. 馃槂

""" Metodo para pedir y validar que un valor introducido es num茅rico y con la opci贸n que pedir un numero positivo.  """

def pedir_numero_validado(positivo = False):
    validado = False
    while validado != True:
        try:
            value = int(input('Introduce el valor: '))
            if positivo:
                if value >= 0:
                    validado = True
                    return value
                else:
                    print('Debes introducir un numero positivo')
            else:
                validado = True
                return value
        except ValueError:
            print ("Debes introducir un numero")```

Hola, con este codigo pueden escoger el divisor en la con consola en vez de en las lineas de codigo, espero les sirva o al menos de ejemplo

def divide_elementos_de_lista(lista, divisor):
    try:
        return [i  / divisor for i in lista]
    except ZeroDivisionError as e:
        print(e)
        return lista

lista = list(range(10))
divisor = 0


print(divide_elementos_de_lista(lista, divisor))```

no conocia reise

seria bueno que dejaran algun link para hacer ejercicios.

Good class!