Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Bedste Praksis for Undtagelseshåndtering | Mestring af Fejlhåndtering i Python
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Python Strukturel Programmering

bookBedste Praksis for Undtagelseshåndtering

'as'-nøgleordet i undtagelser

Nøgleordet as bruges i undtagelseshåndtering til at fange en instans af undtagelsen. Dette er nyttigt for at opnå flere detaljer om fejlen og kan især være hjælpsomt til logning eller til at reagere mere informeret på fejlen.

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

Hvad er Traceback?

En traceback giver detaljer om den faktiske sti, som programudførelsen har taget frem til det punkt, hvor undtagelsen opstod. Den indeholder funktionskald foretaget i dit program og linjenumre i dine kodefiler, hvor disse kald blev foretaget. Tracebacks er afgørende for fejlfinding af fejl i udviklings- og produktionsmiljø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 praksisser i undtagelseshåndtering

1. Fang for generelle undtagelser

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

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

At fange for generelle undtagelser kan skjule den egentlige årsag til fejl, hvilket gør fejlfinding vanskelig og potentielt skjuler andre problemer, der kræver specifik håndtering. Dette reducerer pålideligheden og vedligeholdelsen af softwaren.

2. Fang og genudløs undtagelse

Hvis det er nødvendigt at udføre en handling, når en undtagelse opstår, men stadig ønsker at lade undtagelsen boble op.

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

Bemærk

Funktionerne log_error(e) og print(e) viser begge den fulde traceback af en fejl, hvilket kan være nyttigt under udvikling. I et produktionsmiljø kan visning af komplette tracebacks dog udsætte applikationen for sårbarheder, da de ofte indeholder følsomme oplysninger.

3. Undtagelsesydelse

Undgå overdreven brug af try-except blokke i din kode, da overdreven brug kan gøre dit program langsommere. Implementér dem kun, når de tjener et funktionelt formål. Brug af en if-sætning er generelt hurtigere og mere effektiv.

Opgave

Swipe to start coding

Refaktorer følgende Python-script for at forbedre dets undtagelseshåndtering baseret på de bedste praksisser, der er gennemgået.

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 kontrol for at sikre, at data-listen ikke er tom, før der fortsættes, ved at bruge en ValueError.
  • Den refaktorerede kode fanger specifikke undtagelser (ZeroDivisionError, TypeError, IndexError) i stedet for at bruge en generel except-sætning.
  • Hver undtagelsestype har en tilpasset fejlmeddelelse, der giver mere kontekst om, hvad der gik galt.

Løsning

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 5
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

close

bookBedste Praksis for Undtagelseshåndtering

Stryg for at vise menuen

'as'-nøgleordet i undtagelser

Nøgleordet as bruges i undtagelseshåndtering til at fange en instans af undtagelsen. Dette er nyttigt for at opnå flere detaljer om fejlen og kan især være hjælpsomt til logning eller til at reagere mere informeret på fejlen.

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

Hvad er Traceback?

En traceback giver detaljer om den faktiske sti, som programudførelsen har taget frem til det punkt, hvor undtagelsen opstod. Den indeholder funktionskald foretaget i dit program og linjenumre i dine kodefiler, hvor disse kald blev foretaget. Tracebacks er afgørende for fejlfinding af fejl i udviklings- og produktionsmiljø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 praksisser i undtagelseshåndtering

1. Fang for generelle undtagelser

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

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

At fange for generelle undtagelser kan skjule den egentlige årsag til fejl, hvilket gør fejlfinding vanskelig og potentielt skjuler andre problemer, der kræver specifik håndtering. Dette reducerer pålideligheden og vedligeholdelsen af softwaren.

2. Fang og genudløs undtagelse

Hvis det er nødvendigt at udføre en handling, når en undtagelse opstår, men stadig ønsker at lade undtagelsen boble op.

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

Bemærk

Funktionerne log_error(e) og print(e) viser begge den fulde traceback af en fejl, hvilket kan være nyttigt under udvikling. I et produktionsmiljø kan visning af komplette tracebacks dog udsætte applikationen for sårbarheder, da de ofte indeholder følsomme oplysninger.

3. Undtagelsesydelse

Undgå overdreven brug af try-except blokke i din kode, da overdreven brug kan gøre dit program langsommere. Implementér dem kun, når de tjener et funktionelt formål. Brug af en if-sætning er generelt hurtigere og mere effektiv.

Opgave

Swipe to start coding

Refaktorer følgende Python-script for at forbedre dets undtagelseshåndtering baseret på de bedste praksisser, der er gennemgået.

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 kontrol for at sikre, at data-listen ikke er tom, før der fortsættes, ved at bruge en ValueError.
  • Den refaktorerede kode fanger specifikke undtagelser (ZeroDivisionError, TypeError, IndexError) i stedet for at bruge en generel except-sætning.
  • Hver undtagelsestype har en tilpasset fejlmeddelelse, der giver mere kontekst om, hvad der gik galt.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 5
single

single

some-alt