MAB225 – Computação II – Aula 26/04/2011

MAB 225 - Computação II - Fabio Mascarenhas

try/except/finally com frações (26/04/2011)

class DenominadorZero(ZeroDivisionError):
    pass

class Fracao:
    def __init__(self, num, den=1):
        if den == 0:
            raise DenominadorZero('denominador 0')
        self.num = num
        self.den = den
        self.simp()
    def __div__(self, outro):
        return Fracao(self.num*outro.den, self.den*outro.num)
    def __repr__(self):
        if self.den == 1:
            return str(self.num)
        else:
            return str(self.num) + "/" + str(self.den)

def pede_fracao(n):
    num = input("Numerador " + str(n) + ": ")
    den = input("Denominador " + str(n) + ": ")
    while True:
        try:
            f = Fracao(num, den)
            print f
            return f
        except ZeroDivisionError:
            print "Denominador foi 0, tente de novo"
            den = input("Denominador " + n + ": ")
        except TypeError:
            print "Denominador nao e numero, tente de novo"
            den = input("Denominador " + str(n) + ": ")
        finally:
            print "no finally"
 
while True:
    try:
        f1 = pede_fracao(1)
        f2 = pede_fracao(2)
        print "f1/f2: " + str(f1/f2)
    except:
        print "Erro no programa"

Níveis de erro (26/04/2011)

def f3():
    try:
        raise Exception
    except:
        print "Erro em f3"
        raise Exception

def f2():
    try:
        f3()
    except:
        print "Erro em f2"
        raise Exception

def f1():
    try:
        f2()
    except:
        print "Erro em f1"
        raise Exception

try:
    f1()
except:
    print "Erro no nivel superior"