Python Obrada iznimki: try, except, finally, raise
โก Pametni saลพetak
Python Obrada iznimaka omoguฤuje vaลกem programu da reagira na pogreลกke tijekom izvoฤenja umjesto da se ruลกi. Ovdje ฤete nauฤiti kako try, except, finally i raise rade, zaลกto su iznimke vaลพne i uobiฤajene ugraฤene vrste pogreลกaka s kojima ฤete se susresti.

U ฤemu je rukovanje iznimkom Python?
Iznimka je pogreลกka koja se dogaฤa u trenutku izvoฤenja programa. Meฤutim, tijekom izvoฤenja programa, Python generira iznimku koju treba rijeลกiti kako bi se izbjegao pad vaลกeg programa. U Python jezika, iznimke se aktiviraju automatski na pogreลกke ili ih moลพe pokrenuti i presresti vaลก kod.
Iznimka ukazuje da se, iako se dogaฤaj moลพe dogoditi, ova vrsta dogaฤaja dogaฤa rijetko. Kada metoda ne moลพe obraditi iznimku, izbacuje se svojoj funkciji pozivatelja. Na kraju, kada se izuzetak izbaci iz glavne funkcije, program se naglo prekida.
Uobiฤajeni primjeri iznimke
- Dijeljenje s nulom
- Pristup datoteci koja ne postoji.
- Zbrajanje dva nekompatibilna tipa
- Pokuลกavate pristupiti nepostojeฤem indeksu niza
- Uklanjanje tablice s odspojenog posluลพitelja baze podataka.
- Podizanje na bankomatu veฤeg od raspoloลพivog iznosa
Zaลกto biste trebali koristiti iznimke?
Evo razloga za koriลกtenje iznimaka u Python:
- Rukovanje iznimkama omoguฤuje vam odvajanje koda za rukovanje greลกkama od normalnog koda.
- Iznimka je a Python objekt ลกto predstavlja greลกku.
- Kao i kod komentara koda, iznimke vam pomaลพu da se podsjetite ลกto program oฤekuje.
- Pojaลกnjava kรดd i poboljลกava ฤitljivost.
- Omoguฤuje vam da potaknete posljedice jer se rjeลกavanje pogreลกaka odvija na jednom mjestu i na jedan naฤin.
- Iznimka je prikladna metoda za rukovanje porukama o pogreลกkama.
- In Python, moลพete podiฤi iznimku u programu koriลกtenjem metode podizanja iznimke.
- Podizanje iznimke pomaลพe vam da prekinete trenutno izvrลกavanje koda i vraฤa iznimku na oฤekivano stanje dok se ne obradi.
- Obrada iznimaka za komponente koje ih ne mogu izravno obraditi.
Pravila za iznimke
Evo nekih bitnih pravila Python rukovanje iznimkama:
- Iznimke moraju biti objekti klase
- Za iznimke klase, moลพete koristiti naredbu try s klauzulom osim koja spominje odreฤenu klasu.
- ฤak i ako je izjava ili izraz sintaktiฤki ispravan, moลพe prikazati pogreลกku kada se pokuลกa izvrลกiti.
- Pogreลกke pronaฤene tijekom izvoฤenja nazivaju se iznimke i nisu bezuvjetno fatalne.
Python Mehanizam za rukovanje iznimkama
Rukovanje iznimkama upravlja sljedeฤih 5 kljuฤnih rijeฤi:
- pokuลกati
- ulov
- konaฤno
- baciti
Python Isprobajte izjavu
Naredba try ukljuฤuje kljuฤnu rijeฤ try, iza koje slijedi dvotoฤka (:) i skup kodova u kojima se mogu pojaviti iznimke. Ima jednu ili viลกe klauzula.
Tijekom izvoฤenja naredbe try, ako se tada nije dogodila iznimka, tumaฤ zanemaruje rukovatelje iznimkama za tu specifiฤnu naredbu try.
U sluฤaju da se dogodi bilo kakva iznimka u paketu za pokuลกaj, paket za pokuลกaj istjeฤe i kontrola programa prenosi se na odgovarajuฤi osim rukovatelja koji slijedi nakon paketa za pokuลกaj.
Syntax:
try:
statement(s)
Izjava o ulovu
Catch blokovi uzimaju jedan po jedan argument, ลกto je vrsta iznimke koju ฤe vjerojatno uhvatiti. Ovi argumenti mogu varirati od specifiฤne vrste iznimke koja se moลพe mijenjati do sveobuhvatne kategorije iznimaka.
Pravila za catch block:
- Blok catch moลพete definirati pomoฤu kljuฤne rijeฤi catch
- Parametar Catch Exception uvijek je u zagradama
- Uvijek predstavlja vrstu iznimke koja hvata blokove.
- Kod za rukovanje iznimkom napisan je izmeฤu dvije {} vitiฤaste zagrade.
- Moลพete postaviti viลกe catch blokova unutar jednog try bloka.
- Blok catch moลพete koristiti samo nakon bloka try.
- Svi catch blokovi trebaju biti poredani od podklase do iznimke superklase.
Primjer:
try } catch (ArrayIndexOutOfBoundsException e) { System.err.printin("Caught first " + e.getMessage()); } catch (IOException e) { System.err.printin("Caught second " + e.getMessage()); }
Konaฤno Izjava u Python
Finalni blok uvijek se izvrลกava bez obzira na to je li iznimka baฤena ili ne. Konaฤna kljuฤna rijeฤ omoguฤuje vam stvaranje bloka koda koji slijedi blok try-catch.
Na kraju, klauzula nije obavezna. Namjera je definirati radnje ฤiลกฤenja koje bi se trebale provoditi u svim uvjetima.
try: raise KeyboardInterrupt finally: print 'welcome, world!' Output Welcome, world! KeyboardInterrupt
Konaฤno, klauzula se izvrลกava prije naredbe try.
Raise Statement in Python
Naredba raise specificira argument koji inicijalizira objekt iznimke. Ovdje zarez slijedi iza imena izuzetka i argumenta ili torke argumenta koji slijedi iza zareza.
Sintaksa:
raise [Exception [, args [, traceback]]]
U ovoj sintaksi, argument je neobavezan, au vrijeme izvoฤenja, vrijednost argumenta iznimke uvijek je niลกta.
Primjer:
A Python iznimka moลพe biti bilo koja vrijednost poput niza, klase, broja ili objekta. Veฤina ovih iznimaka koje navodi Python jezgra su klase s argumentom koji je instanca klase.
Vaลพno Python greลกke
| Vrsta pogreลกke | Description |
|---|---|
| ArithmeticError | ArithmeticError djeluje kao osnovna klasa za sve aritmetiฤke iznimke. Podiลพe se za pogreลกke u aritmetiฤkim operacijama. |
| ImportError | ImportError se javlja kada pokuลกavate uvesti modul koji se ne predstavlja. Ova vrsta iznimke se javlja ako ste napravili typing greลกka u nazivu modula ili modul koji nije prisutan u standardnoj putanji. |
| Pogreลกka indeksa | IndexErroris se pojavljuje kada pokuลกate uputiti niz koji je izvan raspona. |
| KeyError | Kada se odreฤeni kljuฤ ne pronaฤe u rjeฤniku, javlja se iznimka KeyError. |
| NameError | NameError se pojavljuje kada se ime spominje u kodu koji nikada ne postoji u lokalnom ili globalnom prostoru imena. |
| ValueError | Pogreลกka vrijednosti pojavljuje se kada funkcija ili ugraฤena operacija primi argument koji moลพe biti ispravnog tipa, ali nema odgovarajuฤu vrijednost. |
| EOFerror | Ova vrsta pogreลกke pojavljuje se kada jedna od ugraฤenih funkcija (input() ili raw_input()) dosegne EOF uvjet bez ฤitanja podataka. |
| ZeroDivisonError | Ova vrsta pogreลกke pojavljuje se kada se dijeljenje ili modul s nulom odvija za sve numeriฤke vrste. |
| IOError- | Ova vrsta pogreลกke pojavljuje se kada ulazno/izlazna operacija ne uspije. |
| sintaktiฤka pogreลกka | SyntaxErrors se javlja kada postoji pogreลกka u Python sintaksa. |
| IdentificationError | Ova se pogreลกka pojavljuje kada uvlaka nije ispravno definirana |
Ostalo vaลพno Python iznimke
| izuzetak | Description |
|---|---|
| Aritmetiฤka iznimka | Aritmetiฤka pogreลกka, kao ลกto je dijeljenje s nulom. |
| ArraylndexOutOfBoundsException | Indeks polja je izvan granica. |
| ArrayStoreException | Dodjela vam pomaลพe u elementu polja nekompatibilnog tipa. |
| ClassCastException | Nevaลพeฤi cast |
| MlegalMonitorStateException | Nedopuลกten rad monitora, poput ฤekanja na otkljuฤanu nit. |
| MlegalStateException | Okruลพenje ili aplikacija su u pogreลกnom stanju. |
| ClassNotFoundException | Klasa nije pronaฤena. |
| CloneNotSupportedException | Pokuลกaj kloniranja objekta koji ne implementira Cloneable suฤelje. |
| Illegal AccessException | Pristup razredu je odbijen. |
| InstantiationException | Javlja se kada pokuลกate stvoriti objekt suฤelja ili abstract klasa. |
| CloneNotSupportedException | Pokuลกaj kloniranja objekta koji ne implementira suฤelje. |
Pogreลกka nasuprot iznimkama
| greลกka | iznimke |
|---|---|
| Sve greลกke u Python su neprovjerene vrste. | Iznimke ukljuฤuju oznaฤenu i neoznaฤenu vrstu. |
| Pogreลกke se javljaju u vremenu izvoฤenja koje nije poznato prevoditelju. | Iznimke se mogu obnoviti rukovanjem njima uz pomoฤ try-catch blokova. |
| Pogreลกke su uglavnom uzrokovane okruลพenjem u kojem se aplikacija izvodi. | Sama aplikacija uzrokuje iznimke. |
| Primjeri: OutofMemoryError |
Primjeri: Provjerene iznimke, SQL iznimka, NullPointerException itd. |
