Python Exception Handling Käytä try, paitsi ja viimeinen lause

Tässä opetusohjelmassa opit käsittelemään poikkeuksia Python-ohjelmassa käyttämällä try, paitsi ja lopuksi lauseita esimerkkien avulla.

Video: Python-poikkeusten käsittely (kokeile… paitsi… lopulta)

Poikkeukset Pythonissa

Pythonissa on monia sisäänrakennettuja poikkeuksia, jotka tulevat esiin, kun ohjelma havaitsee virheen (jotain ohjelmassa menee pieleen).

Kun näitä poikkeuksia esiintyy, Python-tulkki pysäyttää nykyisen prosessin ja siirtää sen kutsuprosessiin, kunnes sitä käsitellään. Jos sitä ei käsitellä, ohjelma kaatuu.

Tarkastellaan esimerkiksi ohjelmaa, jossa meillä on toiminto, Ajoka kutsuu funktion B, joka puolestaan ​​kutsuu toimintoa C. Jos toiminnossa tapahtuu poikkeus, Cmutta sitä ei käsitellä C, poikkeus siirtyy kohtaan Bja sitten A.

Jos sitä ei koskaan käsitellä, näyttöön tulee virheilmoitus ja ohjelmamme äkillisesti pysähtyy.

Poikkeusten saaminen Pythonissa

Pythonissa poikkeuksia voidaan käsitellä trykäskyn avulla.

Kriittinen operaatio, joka voi aiheuttaa poikkeuksen, sijoitetaan trylauseen sisälle . Poikkeuksia käsittelevä koodi on kirjoitettu exceptlausekkeeseen.

Voimme siis valita suoritettavat toiminnot, kun olemme saaneet poikkeuksen. Tässä on yksinkertainen esimerkki.

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except: print("Oops!", sys.exc_info()(0), "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Tuotos

Merkintä on Hups! tapahtui. Seuraava merkintä. Merkintä on 0 Hups! tapahtui. Seuraava merkintä. Merkintä on 2. Vastakohta 2 on 0,5

Tässä ohjelmassa käymme läpi randomList-luettelon arvot. Kuten aiemmin mainittiin, osa, joka voi aiheuttaa poikkeuksen, sijoitetaan trylohkon sisään.

Jos poikkeusta ei tapahdu, exceptlohko ohitetaan ja normaali virtaus jatkuu (viimeiselle arvolle). Mutta jos jotain poikkeusta tapahtuu, exceptlohko tarttuu siihen (ensimmäinen ja toinen arvo).

Tulostamme poikkeuksen nimen moduulin exc_info()sisäisellä toiminnolla sys. Voimme nähdä asyyt ValueErrorja 0syyt ZeroDivisionError.

Koska jokainen Pythonin poikkeus periytyy perusluokasta Exception, voimme myös suorittaa yllä olevan tehtävän seuraavasti:

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except Exception as e: print("Oops!", e.__class__, "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Tällä ohjelmalla on sama lähtö kuin yllä olevalla ohjelmalla.

Tiettyjen poikkeusten saaminen Pythonissa

Edellä olevassa esimerkissä emme maininneet exceptlausekkeessa mitään erityistä poikkeusta .

Tämä ei ole hyvä ohjelmointikäytäntö, koska se tarttuu kaikkiin poikkeuksiin ja käsittelee kaikki tapaukset samalla tavalla. Voimme määrittää, mitkä poikkeukset exceptlausekkeeseen tulisi tarttua.

tryLauseke voi olla mikä tahansa määrä exceptlausekkeita käsittelemään erilaisia poikkeuksia kuitenkin vain yksi toteutetaan siinä tapauksessa tapahtuu poikkeus.

Voimme käyttää arvoja kerralla määrittelemään useita poikkeuksia poikkeuslausekkeeseen. Tässä on esimerkki näennäiskoodista.

 try: # do something pass except ValueError: # handle ValueError exception pass except (TypeError, ZeroDivisionError): # handle multiple exceptions # TypeError and ZeroDivisionError pass except: # handle all other exceptions pass

Poikkeusten lisääminen Pythonissa

Python-ohjelmoinnissa poikkeuksia tuodaan esiin, kun virheitä esiintyy ajon aikana. Voimme myös nostaa poikkeuksia manuaalisesti raiseavainsanalla.

Voimme valinnaisesti siirtää arvot poikkeukseen sen selvittämiseksi, miksi kyseinen poikkeus nostettiin.

 >>> raise KeyboardInterrupt Traceback (most recent call last):… KeyboardInterrupt >>> raise MemoryError("This is an argument") Traceback (most recent call last):… MemoryError: This is an argument >>> try:… a = int(input("Enter a positive integer: "))… if a <= 0:… raise ValueError("That is not a positive number!")… except ValueError as ve:… print(ve)… Enter a positive integer: -2 That is not a positive number!

Python yritä muulla lausekkeella

Joissakin tilanteissa haluat ehkä suorittaa tietyn koodilohkon, jos sisällä oleva koodilohko trysuoritettiin ilman virheitä. Näissä tapauksissa voit käyttää valinnaista elseavainsanaa trylauseen kanssa.

Huomaa : Muut lausekkeessa olevia poikkeuksia ei käsitellä edellisissä lukuun ottamatta lausekkeita.

Katsotaanpa esimerkkiä:

 # program to print the reciprocal of even numbers try: num = int(input("Enter a number: ")) assert num % 2 == 0 except: print("Not an even number!") else: reciprocal = 1/num print(reciprocal)

Tuotos

Jos välitämme parittoman luvun:

 Syötä numero: 1 Ei parillinen luku!

Jos välitämme parillisen luvun, vastavuoroinen lasketaan ja näytetään.

 Syötä numero: 4 0,25

Jos kuitenkin välitämme 0, saamme, ZeroDivisionErrorkoska sisällä olevaa koodilohkoa elseei käsitellä edeltämällä except.

 Enter a number: 0 Traceback (most recent call last): File "", line 7, in reciprocal = 1/num ZeroDivisionError: division by zero

Python try… finally

The try statement in Python can have an optional finally clause. This clause is executed no matter what, and is generally used to release external resources.

For example, we may be connected to a remote data center through the network or working with a file or a Graphical User Interface (GUI).

In all these circumstances, we must clean up the resource before the program comes to a halt whether it successfully ran or not. These actions (closing a file, GUI or disconnecting from network) are performed in the finally clause to guarantee the execution.

Here is an example of file operations to illustrate this.

 try: f = open("test.txt",encoding = 'utf-8') # perform file operations finally: f.close()

Tämän tyyppinen rakenne varmistaa, että tiedosto on suljettu, vaikka ohjelman suorittamisen aikana tapahtuisi poikkeus.

Mielenkiintoisia artikkeleita...