# 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))