ניהול שגיאות ב-Python

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

YouTube Video