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