[Python] Przechwycenie wyjątku TypeError funkcji __init__()

0

Witam!

Chciałbym przechwycić wyjątek rzucany przez funkcję Kalkulator.__init__(), problem w tym, że nie wiem w którym momencie i w jakim zakresie następuje rzucenie wyjątku związanego z wywołanie funkcji __init__() z niepoprawną liczbą argumentów.

class Kalkulator:
    def __init__(self, A, B):
        try:
            self.A = A
            self.B = B
            self.C = 0
        except TypeError:
            print 'Nie podano wartosci!'

    def Print(self):
        print self.A
        print self.B

    def Suma(self):
        self.C = self.A + self.B
        return self.C
    def Roznica(self):
        self.C = self.A - self.B
        return self.C
    def Mnozenie(self):
        self.C = self.A * self.B
        return self.C
    def Dzielenie(self):
        try:
            self.C = self.A / self.B
            return self.C
        except ZeroDivisionError:
            print 'Nie mozna dzielic przez 0!'
    def setValue(self, A, B, val = False):
        self.A = A
        self.B = B
        if val:
            self.C = None

xc = Kalkulator(10, 6, 0)

Próbowałem przechwycić ten wyjątek w funkcji __init__() ale to nie skutkuje.
Proszę o pomoc i pozdrawiam!

0

Wyjątek poleci przecież przed wywołaniem konstruktora, bo podajesz niewłaściwą liczbę argumentów. Niby jak chcesz łapać wyjątek wewnątrz funkcji, która nie ma prawa zostać wywołana?

0

Witam! Dziękuje za odpowiedz, jednak będę wdzięczny za doprecyzowanie.

class Kalkulator:
    try:
        def __init__(self, A, B):
            self.A = A
            self.B = B
            self.C = None
    except TypeError:
        print 'Niepoprawna inicjalizacja obiektu!'

Umieszczenie funkcji init() w bloku try nie działa, cały czas wyjątek nie jest przechwytywany.

0

LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL LoL <facepalm>

0

winerfresh - nie, nie, ja nie prosiłem o pomoc w napisaniu 1052 palindromów.

0

Ale mam ogromne pytanie, co ty chciałeś osiągnąć poprzez przechwycenie wyjątku podczas deklaracji funkcji? Z reguły wyjątek leci w miejscu gdzie funkcja jest wywoływana, ale może mi się zdawać.
Więc weź troszeczkę pomyśl (wiem wymagam wiele jak na twoje warunki, ale postaraj się chociaż):

try:
    Kalkulator.__init__()
except TypeError:
    print 'Niepoprawna inicjalizacja obiektu!'

PS
Ogólnie nie mam zielonego pojęcia o Pythonie (którego z resztą nie lubię).

0

Wyjątek łapiesz tam, gdzie tworzysz obiekt... Niby jak to sobie wyobrażasz? Obiekt nie jest tworzony, wyjątek jest po cichu łapany przez 'okolice konstruktora' i potem program idzie dalej mając niepoprawny obiekt?

class Zuo(object):
    def __init__(self, s_EA, e_EA):
        self._s_EA = s_EA
        self._e_EA = e_EA

try:
    zuo1 = Zuo(69, 666)
except TypeError, e:
    print 'nie udało się utworzyć obiektu dla `zuo1`'
else:
    print 'obiekt dla `zuo1` utworzony poprawnie'

try:
    zuo2 = Zuo('rydzyk')
except TypeError:
    print 'nie udało się utworzyć obiektu dla `zuo2`'
else:
    print 'obiekt dla `zuo2` utworzony poprawnie'

Wnioski wyciągnij sam...

0

Właśnie o taką odpowiedz prosiłem.
Rzeczywiście nie pomyślałem, jednakże nie uważam tego za powód do złośliwości z Twojej strony.
Nie mniej jednak dziękuję za pomoc i pozdrawiam.

Deus - również dziękuję za pomoc i pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1