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.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme