105 lines
2.2 KiB
Python
105 lines
2.2 KiB
Python
# 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))
|
|
|