Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Bästa Praxis för Undantagshantering | Bemästra Felhantering i Python
Python Strukturell Programmering

bookBästa Praxis för Undantagshantering

Nyckelordet 'as' i undantag

Nyckelordet as används vid undantagshantering för att fånga en instans av undantaget. Detta är användbart för att få mer information om felet och kan vara särskilt hjälpsamt för loggning eller för att hantera felet på ett mer informerat sätt.

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

Vad är Traceback?

En traceback ger detaljer om den faktiska vägen som programmets exekvering har tagit fram till den punkt där undantaget inträffade. Den inkluderar funktionsanropen som gjorts i ditt program och radnumren i dina kodfiler där dessa anrop gjordes. Tracebacks är avgörande för felsökning av fel i både utvecklings- och 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

Goda metoder för undantagshantering

1. Fånga för generella undantag

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

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

Att fånga för generella undantag kan dölja den verkliga orsaken till fel, vilket försvårar felsökning och kan maskera andra problem som kräver specifik hantering. Detta minskar tillförlitligheten och underhållbarheten i programvaran.

2. Fånga och vidarebefordra undantag

Om du behöver utföra en åtgärd när ett undantag inträffar men ändå vill att undantaget ska bubbla upp.

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

Notera

Funktionerna log_error(e) och print(e) visar båda hela stackspåret för ett fel, vilket kan vara användbart under utveckling. I en produktionsmiljö kan dock visning av fullständiga stackspår utsätta applikationen för sårbarheter, eftersom de ofta innehåller känslig information.

3. Undantagsprestanda

Undvik överanvändning av try-except-block i din kod, eftersom överdriven användning kan göra programmet långsammare. Använd dem endast när de fyller en funktionell roll. Att använda ett if-uttryck är generellt snabbare och mer effektivt.

Uppgift

Swipe to start coding

Omstrukturera följande Python-skript för att förbättra dess undantagshantering enligt de bästa praxis som diskuterats.

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

# Example usage
result = process_data([1, 2, 0])
  • Koden innehåller en kontroll för att säkerställa att listan data inte är tom innan den fortsätter, med hjälp av ett ValueError.
  • Den omstrukturerade koden fångar specifika undantag (ZeroDivisionError, TypeError, IndexError) istället för att använda en generell except-sats.
  • Varje undantagstyp har ett anpassat felmeddelande som ger mer kontext om vad som gick fel.

Lösning

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 5
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

close

bookBästa Praxis för Undantagshantering

Svep för att visa menyn

Nyckelordet 'as' i undantag

Nyckelordet as används vid undantagshantering för att fånga en instans av undantaget. Detta är användbart för att få mer information om felet och kan vara särskilt hjälpsamt för loggning eller för att hantera felet på ett mer informerat sätt.

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

Vad är Traceback?

En traceback ger detaljer om den faktiska vägen som programmets exekvering har tagit fram till den punkt där undantaget inträffade. Den inkluderar funktionsanropen som gjorts i ditt program och radnumren i dina kodfiler där dessa anrop gjordes. Tracebacks är avgörande för felsökning av fel i både utvecklings- och 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

Goda metoder för undantagshantering

1. Fånga för generella undantag

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

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

Att fånga för generella undantag kan dölja den verkliga orsaken till fel, vilket försvårar felsökning och kan maskera andra problem som kräver specifik hantering. Detta minskar tillförlitligheten och underhållbarheten i programvaran.

2. Fånga och vidarebefordra undantag

Om du behöver utföra en åtgärd när ett undantag inträffar men ändå vill att undantaget ska bubbla upp.

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

Notera

Funktionerna log_error(e) och print(e) visar båda hela stackspåret för ett fel, vilket kan vara användbart under utveckling. I en produktionsmiljö kan dock visning av fullständiga stackspår utsätta applikationen för sårbarheter, eftersom de ofta innehåller känslig information.

3. Undantagsprestanda

Undvik överanvändning av try-except-block i din kod, eftersom överdriven användning kan göra programmet långsammare. Använd dem endast när de fyller en funktionell roll. Att använda ett if-uttryck är generellt snabbare och mer effektivt.

Uppgift

Swipe to start coding

Omstrukturera följande Python-skript för att förbättra dess undantagshantering enligt de bästa praxis som diskuterats.

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

# Example usage
result = process_data([1, 2, 0])
  • Koden innehåller en kontroll för att säkerställa att listan data inte är tom innan den fortsätter, med hjälp av ett ValueError.
  • Den omstrukturerade koden fångar specifika undantag (ZeroDivisionError, TypeError, IndexError) istället för att använda en generell except-sats.
  • Varje undantagstyp har ett anpassat felmeddelande som ger mer kontext om vad som gick fel.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 5
single

single

some-alt