Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Poikkeusketjutus ja Uudelleennostaminen | Comprehensive Error Handling
Pythonin Rakenteellinen Ohjelmointi

Poikkeusketjutus ja Uudelleennostaminen

Pyyhkäise näyttääksesi valikon

Kun käsittelet virheitä Pythonissa, saatat kohdata tilanteen, jossa yhden poikkeuksen käsittely johtaa uuden poikkeuksen nostamiseen. Näissä tapauksissa on tärkeää säilyttää alkuperäisen virheen konteksti. Pythonin poikkeusketjutus mahdollistaa tämän käyttämällä from-avainsanaa. Ketjuttamalla poikkeukset eksplisiittisesti saat yksityiskohtaisemmat jäljitykset, mikä helpottaa virheiden ketjun ymmärtämistä.

Oletetaan, että kirjoitat funktiota, joka käsittelee tiedostosta luettua syötettä. Jos tiedoston lukemisen aikana tapahtuu virhe, saatat haluta nostaa oman sovelluksesi logiikkaan paremmin sopivan poikkeuksen, mutta haluat myös säilyttää tiedon alkuperäisestä virheestä. Käyttämällä raise NewException() from original_exception voit tehdä juuri tämän.

Poikkeuksen uudelleennostaminen on toinen samankaltainen tekniikka. Joskus poikkeuksen käsittelyn jälkeen haluat suorittaa siivousta tai lokitusta ja antaa poikkeuksen jatkaa kulkuaan ylöspäin. Tämä onnistuu käyttämällä pelkkää raise-komentoa ilman poikkeuksen määrittelyä, jolloin viimeisin käsitelty poikkeus nostetaan uudelleen. Sekä poikkeusketjutus että uudelleennostaminen ovat hyödyllisiä tapoja kirjoittaa vankkaa ja helposti debugattavaa koodia.

12345678910111213141516
# Simple exception chaining and re-raising example def divide(a, b): try: return a / b except ZeroDivisionError as err: # Chain a new exception to the original raise ValueError("Cannot divide by zero") from err try: divide(5, 0) except ValueError as e: print("Caught ValueError:") import traceback traceback.print_exc() print("\nRe-raising the exception...\n") raise

Tämä koodi havainnollistaa yksinkertaista poikkeusketjutusta ja uudelleennostamista Pythonissa. divide-funktio yrittää jakaa kaksi lukua ja käsittelee ZeroDivisionError-poikkeuksen, ketjuttaen sen uuteen ValueError-poikkeukseen selkeällä viestillä. Ulompi try-except-lohko käsittelee ValueError-poikkeuksen, tulostaa täydellisen jäljityksen, jossa näkyvät molemmat poikkeukset, ja nostaa poikkeuksen uudelleen eteenpäin.

question mark

Mikä seuraavista on poikkeusketjutuksen ensisijainen hyöty Pythonissa?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 1. Luku 6
some-alt