Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Beste Praksiser for Unntakshåndtering | Mestre Feilbehandling i Python
Python Strukturert Programmering

bookBeste Praksiser for Unntakshåndtering

'as'-nøkkelordet i unntak

Nøkkelordet as brukes i unntakshåndtering for å fange en instans av unntaket. Dette er nyttig for å få mer informasjon om feilen, og kan være spesielt hjelpsomt for logging eller for å håndtere feilen på en mer informert måte.

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

Hva er traceback?

En traceback gir detaljer om den faktiske banen som ble fulgt av programutførelsen frem til punktet hvor unntaket oppstod. Den inkluderer funksjonskallene som ble gjort i programmet ditt og linjenumrene i kodefilene hvor disse kallene ble gjort. Tracebacks er avgjørende for feilsøking av feil i både utviklings- og produksjonsmiljøer.

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

Gode praksiser for unntakshåndtering

1. Fange for generelle unntak

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

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

Å fange for generelle unntak kan skjule den egentlige årsaken til feil, noe som gjør feilsøking vanskelig og potensielt skjuler andre problemer som krever spesifikk håndtering. Dette reduserer påliteligheten og vedlikeholdbarheten til programvaren.

2. Fang og kast unntak på nytt

Dersom det er behov for å utføre en operasjon når et unntak oppstår, men fortsatt ønsker at unntaket skal sendes videre.

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

Merk

Funksjonene log_error(e) og print(e) viser begge hele feilmeldingen (traceback) til en feil, noe som kan være nyttig under utvikling. I et produksjonsmiljø kan det imidlertid være en sikkerhetsrisiko å vise hele feilmeldingen, da denne ofte inneholder sensitiv informasjon.

3. Unntak og ytelse

Unngå overdreven bruk av try-except-blokker i koden, da dette kan redusere ytelsen. Bruk dem kun når det er funksjonelt nødvendig. Å bruke en if-setning er som regel raskere og mer effektivt.

Oppgave

Swipe to start coding

Refaktorer følgende Python-skript for å forbedre unntakshåndteringen basert på de beste praksisene som er diskutert.

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

# Example usage
result = process_data([1, 2, 0])
  • Koden inkluderer en sjekk for å sikre at listen data ikke er tom før den fortsetter, ved å bruke en ValueError.
  • Den refaktorerte koden fanger opp spesifikke unntak (ZeroDivisionError, TypeError, IndexError) i stedet for å bruke en generell except-setning.
  • Hver unntakstype har en tilpasset feilmelding som gir mer kontekst om hva som gikk galt.

Løsning

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 5
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

close

bookBeste Praksiser for Unntakshåndtering

Sveip for å vise menyen

'as'-nøkkelordet i unntak

Nøkkelordet as brukes i unntakshåndtering for å fange en instans av unntaket. Dette er nyttig for å få mer informasjon om feilen, og kan være spesielt hjelpsomt for logging eller for å håndtere feilen på en mer informert måte.

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

Hva er traceback?

En traceback gir detaljer om den faktiske banen som ble fulgt av programutførelsen frem til punktet hvor unntaket oppstod. Den inkluderer funksjonskallene som ble gjort i programmet ditt og linjenumrene i kodefilene hvor disse kallene ble gjort. Tracebacks er avgjørende for feilsøking av feil i både utviklings- og produksjonsmiljøer.

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

Gode praksiser for unntakshåndtering

1. Fange for generelle unntak

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

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

Å fange for generelle unntak kan skjule den egentlige årsaken til feil, noe som gjør feilsøking vanskelig og potensielt skjuler andre problemer som krever spesifikk håndtering. Dette reduserer påliteligheten og vedlikeholdbarheten til programvaren.

2. Fang og kast unntak på nytt

Dersom det er behov for å utføre en operasjon når et unntak oppstår, men fortsatt ønsker at unntaket skal sendes videre.

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

Merk

Funksjonene log_error(e) og print(e) viser begge hele feilmeldingen (traceback) til en feil, noe som kan være nyttig under utvikling. I et produksjonsmiljø kan det imidlertid være en sikkerhetsrisiko å vise hele feilmeldingen, da denne ofte inneholder sensitiv informasjon.

3. Unntak og ytelse

Unngå overdreven bruk av try-except-blokker i koden, da dette kan redusere ytelsen. Bruk dem kun når det er funksjonelt nødvendig. Å bruke en if-setning er som regel raskere og mer effektivt.

Oppgave

Swipe to start coding

Refaktorer følgende Python-skript for å forbedre unntakshåndteringen basert på de beste praksisene som er diskutert.

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

# Example usage
result = process_data([1, 2, 0])
  • Koden inkluderer en sjekk for å sikre at listen data ikke er tom før den fortsetter, ved å bruke en ValueError.
  • Den refaktorerte koden fanger opp spesifikke unntak (ZeroDivisionError, TypeError, IndexError) i stedet for å bruke en generell except-setning.
  • Hver unntakstype har en tilpasset feilmelding som gir mer kontekst om hva som gikk galt.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 5
single

single

some-alt