Apuntes_Python/01_curso/Modulo_2/2-2b_excepcion_personalizada.py

105 lines
2.2 KiB
Python
Raw Normal View History

2022-12-24 22:41:20 -03:00
# Excepcione Personalizadas
class Error(Exception):
"""Clase base para excepciones en el módulo"""
pass
class EntradaError(Error):
"""Excepción lanzada por error en las entradas.
Atributos:
expresion -- expresión de entrada en la que ocurre el error
mensaje -- explicación del error
"""
def __init__(self, expresion, mensaje):
self.expresion = expresion
self.mensaje = mensaje
class TransicionError(Error):
"""Lanzada por operación que intenta transición de estado no permitida.
Atributos:
previo -- estado al conmenzar la transición
siguiente -- nuevo estado intentado
mensaje -- explicación de transición no permitida
"""
def __init__(self, previo, siguiente, mensaje):
self.previo = previo
self.siguiente = siguiente
self.mensaje = mensaje
# Este segmento fue presentado como "Acciones de limpieza, sin más"
try:
#raise KeyboardInterrupt
pass
finally:
print('hasta pronto!')
def dividir(x, y):
try:
res = x / y
except ZeroDivisionError:
print("¡división por cero!")
else:
print("el resultado es: ", res)
finally:
print('bloque finally')
dividir(2, 1)
dividir(2, 0)
print('''
Esta sencetencia deja el archivo abierto tras usarlo:
for linea in open("miarchivo.txt"):
print(linea, end="")
with asegura liberar el recurso tras su uso:
with open("miarchivo.txt") as f:
for linea in f:
print(linea, end="")
''')
def find(elemento, lista):
"""Devuelve el indice del @elemento en @lista.
Si no lo encuentra retorna -1
"""
index = 0
while True:
try:
if lista[index] == elemento:
return index
except IndexError:
return -1
index += 1
# ejemplos de find
print( find(4, [2, 3, 4, 5]) )
print( find(2, [2, 3, 4, 5]) )
print( find(9, [2, 3, 4, 5]) )
# Ejemplo de excepcion propia
class MiExcepcion(Exception):
"Excepcion personalizada"
pass
def fun_ejm(numero):
if numero <= 0:
raise MiExcepcion("nro negativ. o cero")
return 1/numero
print(fun_ejm(10))
print(fun_ejm(-4))