ניהול שגיאות ב-Python
במאמר זה נסביר כיצד לטפל בשגיאות ב-Python.
YouTube Video
ניהול שגיאות ב-Python
ניהול שגיאות ב-Python מתבצע בעיקר באמצעות מילות המפתח try
, except
, else
ו-finally
. שימוש במבנים אלו מאפשר להתנהג בצורה נכונה כאשר מתרחשת שגיאה בתוכנית שלכם. להלן נסביר כיצד להשתמש בכל אחד מהם.
בלוק try
בתוך בלוק try
, כותבים את הקוד שברצונכם להריץ. אם מתרחשת שגיאה בתוך הבלוק, הרצת התוכנית עוברת מידית לבלוק except
.
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}")
- הקוד הזה הוא דוגמא לזיהוי שגיאות בתוך בלוק
try
וטיפול נאות בהן על ידי תפיסה שלValueError
אוZeroDivisionError
.
בלוק except
בתוך בלוק except
, כותבים את הקוד שירוץ כאשר מתרחשת חריגה (שגיאה) מסוימת. ניתן גם ללכוד חריגות מסוימות, בהתאם לסוג החריגה שמתרחשת.
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}")
- הקוד הזה הוא דוגמא לביצוע טיפול שונה עבור כל סוג חריגה בתוך בלוק
except
כאשר מתרחשת שגיאה בבלוקtry
.
ניהול מספר חריגות יחד
ציינו Tuple כאשר מספר מחלקות חריגה יכולות לשתף את אותה לוגיקת טיפול.
1try:
2 my_list = [1, 2]
3 result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5 print(f"Exception occurred: {e}")
- הקוד הזה הוא דוגמא ללכידת חריגות
IndexError
ו־ZeroDivisionError
יחד וטיפול בהן באותו אופן.
לכידת חריגות ללא תנאי
השמיטו את הארגומנט של except
אם ברצונכם לטפל בכל סוגי החריגות בבלוק אחד.
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")
- עם זאת, טיפול בחריגות מסוימות במקום לתפוס את כל החריגות ללא תנאי עוזר יותר למציאת באגים וניפוי שגיאות. ככל שניתן, טיפול מפורש רק בחריגות הצפויות כמו
ValueError
אוTypeError
יגביר את החוסן של הקוד שלך.
בלוק else
בלוק else
יבוצע רק אם לא התרחשו שגיאות בתוך בלוק ה-try
.
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)
- הקוד הזה הוא דוגמא לכך שבלוק
else
ירוץ רק אם לא התרחשה שגיאה בבלוקtry
.
בלוק finally
בלוק finally
משמש לכתיבת קוד שתמיד יבוצע בסוף ללא קשר אם התרחשה שגיאה בבלוק try
. בלוק זה שימושי לשחרור משאבים או לביצוע משימות ניקוי.
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.")
- הקוד הזה הוא דוגמא לכך שבלוק
finally
מתבצע ללא קשר אם התרחשה חריגה או לא.
המילת מפתח raise
ניתן גם להעלות חריגה באמצעות מילת המפתח raise
כאשר תנאים מסוימים בקוד הקיים אינם מתקיימים.
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}")
- הקוד הזה הוא דוגמא ליצירת חריגה בצורה מפורשת באמצעות מילת המפתח
raise
כאשר תנאי מסוים לא מתקיים.
סיום
על ידי טיפול בשגיאות בצורה זו, ניתן למנוע קריסת תוכניות, להציג הודעות מתאימות למשתמש ולהמשיך בעיבוד התוכנית.
תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.