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 antingenValueError
ellerZeroDivisionError
.
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 itry
-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
ochZeroDivisionError
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
ellerTypeError
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 itry
-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.