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" Indeks 15.5 Korišćenje naredbi
try i finally

Primjedbe

Popularno ovog meseca

Gde pronaći novosti sa facebook stranica nakon velike promene koja ga je zadesila?

Dva načina da vratite svoj Windows 10 na fabričke vrednosti

Kako preuzeti video koji je neko postavio na facebook-u bez upotrebe dodatnih programa?

Više neće biti moguć besplatan prelazak na Windows 10

Prijateljski meč ŠK "Titel" - ŠK "Bukovac"

Kako manipulisati Windows licencom pomoću slmgr komande?

Tu je novi Qt creator 4.4.0!

Fake poet

Da li je poželjno biti anoniman na internetu (ili se predstavljati punim imenom i prezimenom)?

Kosmička era može da počne! 10, 9, 8, 7.... Naravno, pre 60 godina...