Podizanje sopstvenih grešaka

15.4 Podizanje sopstvenih grešaka 

Mi ne želimo da naš program radi pogrešno, a pri kompleksnim zadacima nemožemo biti sigurni da ćemo mi 100% uspeti da predvidimo korisnikove akcije. Zato je, u mnogim slučajevima pametnije da mi sami, ukoliko se desi nešto, izbacimo neku informativnu grešku korisniku i prekinemo program. Možda je program bio važan, možda od tog programa zavisi dosta toga – bolje neka korisnik zna da se desilo nešto, nego da nam on lupa lopatom u glavu, zato što je izgubio svoje vreme i novac, jer nije znao da naš program ne funkcioniše. Zato je bitno znati kako da se podignu greške.
Greške se podižu pomoću naredbe raise posle koje pišemo ime greške ili nekog objekta exception klase koji nam služi da bude okidač za izbacivanje greške. 
Greška koju želimo da podignemo mora da bude objekat klase koja, direktno ili indirektno, mora biti izvedena iz Exception klase (Exception mora biti njena superklasa).
>>> class MojaGreška(Exception): 
... def __init__(self, m_broj, v_broj, unet):
... Exception.__init__(self)
... self.m_broj = m_broj
... self.v_broj = v_broj
... self.unet = unet
...
>>> try:
... b = input('Unesi broj između 100 i 200: ')
... b = int(b)
... if b <= 100 or 200 <= b:
... raise MojaGreška(100, 200, b)
... except MojaGreška as ex:
... print('Uneo si broj', ex.unet, 'a on mora da bude između', ex.m_broj, 'i', ex.v_broj)
... except:
... print('Unos nije dobar - nešto čudno se desilo!')
...
Unesi broj između 100 i 200: 20
Uneo si broj 20 a on mora da bude između 100 i 200
>>>

Na ovom mestu ja sam stvorio sopstveni tip (klasu) grešaka. Nazvao sam je jednostavno MojaGreška. U njoj sam definisao tri polja – self.m_broj – manji broj, self.v_broj – veći broj i self.unos – unet broj.
U „radnom“ delu programa, na mestu na kom postoji opasnost da se desi nešto što može da ugrozi dalji tok rada mi kreiramo objekat klase MojaGreška sa raise komandom.
Prilikom navođenja komande except, koja definiše blok koji opisuje situaciju kada se u programu pojavi MojaGreška, ja sam označio klasu greške, ali pomoću komande as, koja govori Pythonu da objekat greške memoriše kao promenljivu sa nazivom ex. Kasnije se obraćam poljima ovog objekta kao ex.unet itd da bih prikazao odgovarajuću poruku korisniku.

15.3 "Hvatanje grešaka"Indeks15.5 Korišćenje naredbi
try i finally

Коментари