Python Academy · Oppitunti

try / except / else / finally

Jäsentäkää poikkeustenkäsittelylohkot erilaisia tilanteita varten.

Oppitunti 2/414 vaihetta

try / except / else / finally on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

Johdanto

Pythonin try/except/else/finally-rakenne antaa täyden hallinnan virheenkäsittelyyn ja siivoukseen.

try/except-perusrakenne

try: risky_code() except ExceptionType: handle() — Python suorittaa except-lohkon vain, kun kyseinen poikkeustyyppi nostetaan.
try:
    x = int('abc')
except ValueError:
    print('not a number')

Poikkeusobjektin käsitteleminen

except ValueError as e: sitoo poikkeuksen muuttujaan e. Viestin saa selville käyttämällä str(e) tai e.args.
try:
    int('oops')
except ValueError as e:
    print(f'Error: {e}')

Useiden poikkeusten käsitteleminen

except (TypeError, ValueError) as e: käsittelee kumpaa tahansa tyyppiä.
for val in ['abc', None, 42]:
    try:
        print(int(val))
    except (TypeError, ValueError) as e:
        print(f'skipping {val!r}: {e}')

Paljas except (välttäkää sitä)

except: (ilman tyyppiä) käsittelee KAIKKI poikkeukset, myös KeyboardInterrupt- ja SystemExit-tapahtumat. Tämä on lähes aina virhe — määrittäkää tyypit aina.
try:
    risky = 1/0
except ZeroDivisionError:
    print('division error')  # specific

Useita except-lausekkeita

Voitte käyttää useita except-lohkoja, joista kukin käsittelee eri tyyppiä. Python kokeilee niitä järjestyksessä.
def process(val):
    try:
        return 10 / int(val)
    except ValueError:
        print('not a number')
    except ZeroDivisionError:
        print('division by zero')
process('abc')
process('0')

else-lauseke

try/except/else-rakenteessa else suoritetaan vain, jos poikkeusta EI nostettu. Käyttäkää sitä onnistuneen suorituksen jälkeen ajettavalle koodille.
try:
    x = int('42')
except ValueError:
    print('bad input')
else:
    print('parsed:', x)

finally-lauseke

finally suoritetaan AINA — try-lohkon onnistumisen tai except-lohkon jälkeen, myös return- tai break-lauseen jälkeen. Se sopii erinomaisesti siivoukseen.
def read_file(path):
    f = None
    try:
        f = open(path)
        return f.read()
    except FileNotFoundError:
        return None
    finally:
        if f: f.close()
print(read_file('/nonexistent'))

finally ja return

Jos sekä return että finally ovat mukana, finally suoritetaan ensin, mutta finally-lohkon palautusarvo voittaa. Olkaa varovaisia.
def demo():
    try:
        return 'try'
    finally:
        return 'finally'  # overrides!
print(demo())

Sisäkkäiset try-lohkot

try-lohkoja voi sijoittaa sisäkkäin. Sisempi poikkeus etenee ulospäin, jos sisempi except-lohko ei käsittele sitä.
try:
    try:
        x = 1/0
    except ValueError:
        print('inner')
except ZeroDivisionError:
    print('outer caught it')

Poikkeusten kirjaaminen

import logging; logging.exception('msg') kirjaa koko tracebackin. Tämä sopii erinomaisesti tuotantokoodiin.
import logging
try:
    1/0
except ZeroDivisionError:
    logging.exception('Caught an error')

Pikatarkistus

Mikä lauseke suoritetaan riippumatta siitä, tapahtuiko poikkeus?

Kertaus

try/except käsittelee virheet. else suoritetaan onnistumisen jälkeen. finally suoritetaan aina siivousta varten. Käsitelkää tiettyjä tyyppejä ja välttäkää paljasta except-lausetta. Käyttäkää as e -rakennetta poikkeukseen käsiksi pääsemiseen.

Jatkakaa eteenpäin

Hienosti tehty! Siirtykää seuraavaan oppituntiin jatkaaksenne etenemistä.
Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”try / except / else / finally” ilmainen?

Kyllä – oppitunnin ”try / except / else / finally” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”try / except / else / finally”?

Jäsentäkää poikkeustenkäsittelylohkot erilaisia tilanteita varten. Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”try / except / else / finally”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Poikkeusten ymmärtäminen
  2. try / except / else / finally
  3. Poikkeusten nostaminen ja uudelleennostaminen
  4. Mukautetut poikkeusluokat
← Takaisin: Python Academy