Felfunktioner i Python

Felfunktioner i Python

I den här artikeln kommer vi att förklara felhantering i Python.

YouTube Video

Felfunktioner i Python

Felhantering i Python görs huvudsakligen med hjälp av nyckelorden try, except, else och finally. Genom att använda dessa konstruktioner kan du reagera lämpligt när ett fel uppstår i ditt program. Nedan kommer vi att förklara hur man använder var och en av dem.

try-Block

I try-blocket skriver du koden du vill köra. Om ett fel inträffar inom detta block övergår programkörningen omedelbart till except-blocket.

 1try:
 2    # Code that may raise an error (division by zero, for example)
 3    #number = int(input("Enter a number: "))
 4    number = int("abc")
 5    result = 10 / number
 6    print("Result:", result)
 7except ValueError as e:
 8    # Handle invalid input (e.g. non-numeric input)
 9    print("Invalid input. Please enter a whole number.")
10    print(f"Value error: {e}")
11except ZeroDivisionError as e:
12    # Handle division by zero error
13    print("Cannot divide by zero!")
14    print(f"Zero division error: {e}")
  • Den här koden är ett exempel på att upptäcka fel i ett try-block och hantera dem korrekt genom att fånga antingen ValueError eller ZeroDivisionError.

except-Block

I except-blocket skriver du koden som ska köras när ett specifikt undantag (fel) inträffar. Du kan också fånga specifika undantag beroende på vilken typ av undantag som inträffar.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 0
 4    result = 10 / number
 5    print("Result:", result)
 6except ZeroDivisionError as e:
 7    print("Cannot divide by zero!")
 8    print(f"Zero division error: {e}")
 9except ValueError as e:
10    print("Input was not a valid integer.")
11    print(f"Value error: {e}")
  • Den här koden är ett exempel på att utföra olika hantering för varje typ av undantag i except-blocket när ett fel uppstår i try-blocket.

Hantering av flera undantag tillsammans

Ange en tuple när flera undantagsklasser kan dela samma hanteringslogik.

1try:
2    my_list = [1, 2]
3    result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5    print(f"Exception occurred: {e}")
  • Den här koden är ett exempel på att fånga både IndexError och ZeroDivisionError tillsammans och hantera undantagen på samma sätt.

Fånga undantag villkorslöst

Uteslut argumentet för except om du vill hantera alla typer av undantag i ett block.

1try:
2    # This code might cause some exception
3    result = "10" + 5  # TypeError
4except Exception as e:
5    print("Unexpected error")
  • Att hantera specifika undantag istället för att villkorslöst fånga alla undantag är dock mer användbart för att hitta buggar och felsöka. När det är möjligt, hantera endast förväntade undantag som ValueError eller TypeError explicit för att öka robustheten i din kod.

else-Block

else-blocket körs endast om inga fel inträffar i try-blocket.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 5
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
  • Den här koden är ett exempel där else-blocket endast körs om inget fel uppstår i try-blocket.

finally-Block

finally-blocket används för att skriva kod som alltid kommer att köras i slutet, oavsett om ett fel inträffade i try-blocket. Det är användbart för att frigöra resurser eller utföra städuppgifter.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = int("abc")
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
14finally:
15    # This block will always execute, regardless of whether an exception was raised
16    print("Execution completed.")
  • Den här koden är ett exempel som visar att finally-blocket körs oavsett om ett undantag uppstår eller inte.

raise-nyckelordet

Det är också möjligt att utlösa ett undantag med raise-nyckelordet när vissa villkor i befintlig kod inte uppfylls.

1def divide(a, b):
2    if b == 0:
3        raise ValueError("Cannot divide by zero.")
4    return a / b
5
6try:
7    result = divide(10, 0)
8except ValueError as e:
9    print(f"Error: {e}")
  • Den här koden är ett exempel på att explicit kasta ett undantag med hjälp av raise-nyckelordet när ett villkor inte uppfylls.

Slutsats

Genom att hantera fel på detta sätt kan du förhindra programkrascher, visa lämpliga meddelanden till användaren och fortsätta med efterföljande programhantering.

Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.

YouTube Video