Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Best Practices voor Uitzonderingafhandeling | Foutafhandeling in Python Beheersen
Python Structureel Programmeren

bookBest Practices voor Uitzonderingafhandeling

Het 'as'-trefwoord bij uitzonderingen

Het trefwoord as wordt gebruikt bij foutafhandeling om een instantie van de uitzondering vast te leggen. Dit is nuttig om meer details over de fout te verkrijgen en kan bijzonder handig zijn voor het loggen of het op een meer geïnformeerde manier reageren op de fout.

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

Wat is een Traceback?

Een traceback geeft details over het daadwerkelijke pad dat door de uitvoering van een programma is genomen tot het punt waarop de uitzondering optrad. Het bevat de functie-aanroepen die in uw programma zijn gedaan en de regelnummers in uw codebestanden waar deze aanroepen zijn gedaan. Tracebacks zijn essentieel voor het debuggen van fouten in ontwikkel- en productieomgevingen.

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

Goede praktijken bij het afhandelen van uitzonderingen

1. Te algemene uitzonderingen opvangen

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

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

Het opvangen van te algemene uitzonderingen kan de onderliggende oorzaak van fouten verbergen, waardoor het debuggen moeilijk wordt en mogelijk andere problemen worden gemaskeerd die specifieke afhandeling vereisen. Dit vermindert de betrouwbaarheid en het onderhoudsgemak van de software.

2. Uitzondering opvangen en opnieuw opwerpen

Indien een bewerking moet worden uitgevoerd bij het optreden van een uitzondering, maar de uitzondering toch verder moet worden doorgegeven.

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

Opmerking

De functies log_error(e) en print(e) tonen beide de volledige traceback van een fout, wat nuttig kan zijn tijdens de ontwikkeling. In een productieomgeving kan het echter kwetsbaarheden veroorzaken als volledige tracebacks worden weergegeven, omdat deze vaak gevoelige informatie bevatten.

3. Prestaties van uitzonderingen

Vermijd overmatig gebruik van try-except-blokken in de code, omdat dit de prestaties kan vertragen. Implementeer ze alleen wanneer ze functioneel noodzakelijk zijn. Het gebruik van een if-statement is over het algemeen sneller en efficiënter.

Taak

Swipe to start coding

Herschrijf het volgende Python-script om de foutafhandeling te verbeteren op basis van de besproken best practices.

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

# Example usage
result = process_data([1, 2, 0])
  • De code bevat een controle om te verzekeren dat de lijst data niet leeg is voordat wordt doorgegaan, met gebruik van een ValueError.
  • De herschreven code vangt specifieke uitzonderingen (ZeroDivisionError, TypeError, IndexError) in plaats van een algemene except-clausule.
  • Elk type uitzondering heeft een aangepaste foutmelding die meer context geeft over wat er misging.

Oplossing

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 5
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

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

bookBest Practices voor Uitzonderingafhandeling

Veeg om het menu te tonen

Het 'as'-trefwoord bij uitzonderingen

Het trefwoord as wordt gebruikt bij foutafhandeling om een instantie van de uitzondering vast te leggen. Dit is nuttig om meer details over de fout te verkrijgen en kan bijzonder handig zijn voor het loggen of het op een meer geïnformeerde manier reageren op de fout.

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

Wat is een Traceback?

Een traceback geeft details over het daadwerkelijke pad dat door de uitvoering van een programma is genomen tot het punt waarop de uitzondering optrad. Het bevat de functie-aanroepen die in uw programma zijn gedaan en de regelnummers in uw codebestanden waar deze aanroepen zijn gedaan. Tracebacks zijn essentieel voor het debuggen van fouten in ontwikkel- en productieomgevingen.

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

Goede praktijken bij het afhandelen van uitzonderingen

1. Te algemene uitzonderingen opvangen

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

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

Het opvangen van te algemene uitzonderingen kan de onderliggende oorzaak van fouten verbergen, waardoor het debuggen moeilijk wordt en mogelijk andere problemen worden gemaskeerd die specifieke afhandeling vereisen. Dit vermindert de betrouwbaarheid en het onderhoudsgemak van de software.

2. Uitzondering opvangen en opnieuw opwerpen

Indien een bewerking moet worden uitgevoerd bij het optreden van een uitzondering, maar de uitzondering toch verder moet worden doorgegeven.

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

Opmerking

De functies log_error(e) en print(e) tonen beide de volledige traceback van een fout, wat nuttig kan zijn tijdens de ontwikkeling. In een productieomgeving kan het echter kwetsbaarheden veroorzaken als volledige tracebacks worden weergegeven, omdat deze vaak gevoelige informatie bevatten.

3. Prestaties van uitzonderingen

Vermijd overmatig gebruik van try-except-blokken in de code, omdat dit de prestaties kan vertragen. Implementeer ze alleen wanneer ze functioneel noodzakelijk zijn. Het gebruik van een if-statement is over het algemeen sneller en efficiënter.

Taak

Swipe to start coding

Herschrijf het volgende Python-script om de foutafhandeling te verbeteren op basis van de besproken best practices.

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

# Example usage
result = process_data([1, 2, 0])
  • De code bevat een controle om te verzekeren dat de lijst data niet leeg is voordat wordt doorgegaan, met gebruik van een ValueError.
  • De herschreven code vangt specifieke uitzonderingen (ZeroDivisionError, TypeError, IndexError) in plaats van een algemene except-clausule.
  • Elk type uitzondering heeft een aangepaste foutmelding die meer context geeft over wat er misging.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 5
single

single

some-alt