Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Poikkeusten Käsittelyn Parhaat Käytännöt | Mastering Error Handling in Python
Pythonin Rakenteellinen Ohjelmointi

bookPoikkeusten Käsittelyn Parhaat Käytännöt

'as'-avainsana poikkeuksissa

as-avainsanaa käytetään poikkeusten käsittelyssä poikkeusinstanssin talteen ottamiseen. Tämä on hyödyllistä, kun halutaan saada tarkempia tietoja virheestä, ja se voi olla erityisen hyödyllistä virheiden lokituksessa tai kun virheeseen halutaan reagoida tietoisemmin.

1234
try: x = 10 / 0 except ZeroDivisionError as e: print(f"Caught an exception: {e}")
copy

Mikä on Traceback?

Traceback tarjoaa yksityiskohtia ohjelman suorituspolusta siihen pisteeseen asti, jossa poikkeus tapahtui. Se sisältää ohjelmassa tehdyt funktiokutsut sekä kooditiedostojen rivinumerot, joissa nämä kutsut tehtiin. Tracebackit ovat olennaisia virheiden jäljittämisessä kehitys- ja tuotantoympäristöissä.

Traceback (most recent call last):
  File "example.py", line 7, in <module>
    main()
  File "example.py", line 4, in main
    divide_by_zero()
  File "example.py", line 2, in divide_by_zero
    return 1 / 0
ZeroDivisionError: division by zero

Hyvät käytännöt poikkeusten käsittelyssä

1. Liian yleisten poikkeusten käsittely

# Bad Practice
try:
    process_data(data)
except Exception:
    pass

# Best Practice
try:
    process_data(data)
except SpecificError:
    handle_error()

Liian yleisten poikkeusten käsittely voi hämärtää virheiden todellista syytä, vaikeuttaa virheenkorjausta ja mahdollisesti peittää muita ongelmia, jotka vaatisivat tarkempaa käsittelyä. Tämä heikentää ohjelmiston luotettavuutta ja ylläpidettävyyttä.

2. Poikkeuksen käsittely ja uudelleennostaminen

Jos haluat suorittaa jonkin toiminnon poikkeuksen tapahtuessa, mutta haluat silti poikkeuksen etenevän ylemmäs.

# Best Practice
try:
    do_something()
except Exception as e:
    log_error(e)
    raise  # Better: Re-raises the current exception

Huomio

Funktiot log_error(e) ja print(e) näyttävät molemmat virheen koko jäljityksen, mikä voi olla hyödyllistä kehitysvaiheessa. Tuotantoympäristössä täydellisten jäljitysten näyttäminen voi kuitenkin altistaa sovelluksen haavoittuvuuksille, sillä ne sisältävät usein arkaluontoista tietoa.

3. Poikkeusten suorituskyky

Vältä try-except-lohkojen liiallista käyttöä, sillä niiden runsas käyttö voi hidastaa ohjelmaa. Käytä niitä vain, kun niille on selkeä tarve. if-lauseen käyttö on yleensä nopeampaa ja tehokkaampaa.

Tehtävä

Swipe to start coding

Refaktoroi seuraava Python-skripti parantaaksesi sen poikkeusten käsittelyä aiemmin käsiteltyjen parhaiden käytäntöjen mukaisesti.

def process_data(data):
    try:
        return data[0] / data[-1]
    except:
        print("An error occurred.")

# Example usage
result = process_data([1, 2, 0])
  • Koodi sisältää tarkistuksen, jolla varmistetaan, ettei data-lista ole tyhjä ennen jatkamista, käyttämällä ValueError-poikkeusta.
  • Refaktoroitu koodi käsittelee tietyt poikkeukset (ZeroDivisionError, TypeError, IndexError) yleisen except-lauseen sijaan.
  • Jokaiselle poikkeustyypille on oma virheilmoitus, joka antaa tarkempaa tietoa siitä, mikä meni vikaan.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 5
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Suggested prompts:

Can you explain more about how the 'as' keyword works in exception handling?

What information does a traceback provide that helps with debugging?

Can you give more examples of good and bad exception handling practices?

close

bookPoikkeusten Käsittelyn Parhaat Käytännöt

Pyyhkäise näyttääksesi valikon

'as'-avainsana poikkeuksissa

as-avainsanaa käytetään poikkeusten käsittelyssä poikkeusinstanssin talteen ottamiseen. Tämä on hyödyllistä, kun halutaan saada tarkempia tietoja virheestä, ja se voi olla erityisen hyödyllistä virheiden lokituksessa tai kun virheeseen halutaan reagoida tietoisemmin.

1234
try: x = 10 / 0 except ZeroDivisionError as e: print(f"Caught an exception: {e}")
copy

Mikä on Traceback?

Traceback tarjoaa yksityiskohtia ohjelman suorituspolusta siihen pisteeseen asti, jossa poikkeus tapahtui. Se sisältää ohjelmassa tehdyt funktiokutsut sekä kooditiedostojen rivinumerot, joissa nämä kutsut tehtiin. Tracebackit ovat olennaisia virheiden jäljittämisessä kehitys- ja tuotantoympäristöissä.

Traceback (most recent call last):
  File "example.py", line 7, in <module>
    main()
  File "example.py", line 4, in main
    divide_by_zero()
  File "example.py", line 2, in divide_by_zero
    return 1 / 0
ZeroDivisionError: division by zero

Hyvät käytännöt poikkeusten käsittelyssä

1. Liian yleisten poikkeusten käsittely

# Bad Practice
try:
    process_data(data)
except Exception:
    pass

# Best Practice
try:
    process_data(data)
except SpecificError:
    handle_error()

Liian yleisten poikkeusten käsittely voi hämärtää virheiden todellista syytä, vaikeuttaa virheenkorjausta ja mahdollisesti peittää muita ongelmia, jotka vaatisivat tarkempaa käsittelyä. Tämä heikentää ohjelmiston luotettavuutta ja ylläpidettävyyttä.

2. Poikkeuksen käsittely ja uudelleennostaminen

Jos haluat suorittaa jonkin toiminnon poikkeuksen tapahtuessa, mutta haluat silti poikkeuksen etenevän ylemmäs.

# Best Practice
try:
    do_something()
except Exception as e:
    log_error(e)
    raise  # Better: Re-raises the current exception

Huomio

Funktiot log_error(e) ja print(e) näyttävät molemmat virheen koko jäljityksen, mikä voi olla hyödyllistä kehitysvaiheessa. Tuotantoympäristössä täydellisten jäljitysten näyttäminen voi kuitenkin altistaa sovelluksen haavoittuvuuksille, sillä ne sisältävät usein arkaluontoista tietoa.

3. Poikkeusten suorituskyky

Vältä try-except-lohkojen liiallista käyttöä, sillä niiden runsas käyttö voi hidastaa ohjelmaa. Käytä niitä vain, kun niille on selkeä tarve. if-lauseen käyttö on yleensä nopeampaa ja tehokkaampaa.

Tehtävä

Swipe to start coding

Refaktoroi seuraava Python-skripti parantaaksesi sen poikkeusten käsittelyä aiemmin käsiteltyjen parhaiden käytäntöjen mukaisesti.

def process_data(data):
    try:
        return data[0] / data[-1]
    except:
        print("An error occurred.")

# Example usage
result = process_data([1, 2, 0])
  • Koodi sisältää tarkistuksen, jolla varmistetaan, ettei data-lista ole tyhjä ennen jatkamista, käyttämällä ValueError-poikkeusta.
  • Refaktoroitu koodi käsittelee tietyt poikkeukset (ZeroDivisionError, TypeError, IndexError) yleisen except-lauseen sijaan.
  • Jokaiselle poikkeustyypille on oma virheilmoitus, joka antaa tarkempaa tietoa siitä, mikä meni vikaan.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 5
single

single

some-alt