Skip to content

Commit 5d4f7d0

Browse files
Diego Rojas MuñozDiego Rojas Muñoz
Diego Rojas Muñoz
authored and
Diego Rojas Muñoz
committed
#10 - Python
1 parent 6ab8bbd commit 5d4f7d0

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# Excepciones
2+
3+
# Tipos de excepciones
4+
5+
# ZeroDivisionError: Ocurre cuando se intenta dividir entre cero.
6+
# TypeError: Ocurre cuando se realiza una operación con tipos de datos incompatibles.
7+
# ValueError: Ocurre cuando una función recibe un argumento con el tipo correcto pero un valor inapropiado.
8+
# FileNotFoundError: Ocurre cuando se intenta abrir un archivo que no existe.
9+
# IndexError: Ocurre cuando se intenta acceder a un índice fuera de rango en una lista.
10+
# KeyError: Ocurre cuando se intenta acceder a una clave que no existe en un diccionario.
11+
12+
# Estructura basica
13+
try:
14+
# Dividir por cero genera la excepcion 'ZeroDivisionError'
15+
resultado = 10 / 0
16+
except ZeroDivisionError:
17+
# Codigo que se ejecuta si se da la excepcion 'ZeroDivisionError'
18+
print('Error: No se puede dividir entre cero.')
19+
else:
20+
# Codigo que se ejecuta si no hay ninguna excepcion
21+
print('La divison se realizo correctamente.')
22+
finally:
23+
# Codigo que siempre se ejecuta, haya o no excepciones
24+
print('Este bloque siempre se ejecuta.')
25+
26+
print('---------------------')
27+
28+
# Multiples excepciones
29+
try:
30+
resultado = 10 / 0
31+
except (ZeroDivisionError, TypeError, ValueError) as e:
32+
print(f'Error: {e}')
33+
34+
35+
print('---------------------')
36+
37+
38+
# Excepciones personalizadas
39+
class MiErrorPersonalizado(Exception):
40+
pass
41+
42+
43+
try:
44+
raise MiErrorPersonalizado('Este es un error personalizado.')
45+
except MiErrorPersonalizado as e:
46+
print(e)
47+
48+
print('---------------------')
49+
50+
51+
# Ejemplo:
52+
def dividir(a, b):
53+
try:
54+
resultado = a / b
55+
except ZeroDivisionError:
56+
print('Error: No se puede dividir entre cero.')
57+
except TypeError:
58+
print('Error: Los tipos de datos no son validos')
59+
else:
60+
print(f'El resultado de dividir {a} y {b} es: {resultado}')
61+
finally:
62+
print('Fin del bloque.')
63+
64+
dividir(3, 4)
65+
dividir(3, 0)
66+
dividir(3, 'a')
67+
68+
print('---------------------')
69+
70+
# Extra
71+
72+
class ValorInvalidoError(Exception):
73+
def __init__(self, mensaje="El valor proporcionado no es válido"):
74+
self.mensaje = mensaje
75+
super().__init__(self.mensaje)
76+
77+
def procesar_parametros(numero, texto):
78+
if not isinstance(numero, int):
79+
raise TypeError("El primer parámetro debe ser un número entero")
80+
81+
if not isinstance(texto, str):
82+
raise TypeError("El segundo parámetro debe ser una cadena de texto")
83+
84+
if numero < 0:
85+
raise ValorInvalidoError("El número debe ser positivo")
86+
87+
if not texto.strip():
88+
raise ValueError("El texto no puede estar vacío")
89+
90+
return f"Número: {numero}, Texto: {texto}"
91+
92+
93+
def probar_funcion():
94+
casos_prueba = [
95+
(10, "Hola"), # Caso válido
96+
(-5, "Mundo"), # Número negativo
97+
(15, ""), # Texto vacío
98+
("no_numero", "Test"), # Tipo incorrecto
99+
]
100+
101+
for numero, texto in casos_prueba:
102+
try:
103+
resultado = procesar_parametros(numero, texto)
104+
print(f"¡Éxito! {resultado}")
105+
except ValorInvalidoError as e:
106+
print(f"Error personalizado: {e}")
107+
except TypeError as e:
108+
print(f"Error de tipo: {e}")
109+
except ValueError as e:
110+
print(f"Error de valor: {e}")
111+
except Exception as e:
112+
print(f"Error inesperado: {e}")
113+
finally:
114+
print("La ejecución de este caso ha finalizado")
115+
print("-" * 50)
116+
117+
118+
if __name__ == "__main__":
119+
probar_funcion()

0 commit comments

Comments
 (0)