ניהול שגיאות ב-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 בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.