Python:
טיפול בשגיאות

איך לעשות:

# בלוק try-except בסיסי
try:
    # קוד מסוכן
    number = int(input("הכנס מספר: "))
except ValueError:
    # טיפול בשגיאה
    print("זה לא מספר!")

# ציון מספר חריגות
try:
    # קוד שעלול להעלות חריגות שונות
    result = 10 / int(input("הכנס מחלק: "))
except ZeroDivisionError:
    print("אופס! אי אפשר לחלק באפס.")
except ValueError:
    print("אני צריך מספר, חבר.")

# שימוש ב-else ו-finally
try:
    number = int(input("הכנס מספר לריבוע: "))
except ValueError:
    print("אמרתי מספר!")
else:
    # לא התרחשו שגיאות
    print("המספר שלך בריבוע הוא:", number**2)
finally:
    # תמיד מתבצע
    print("תודה שניסית את זה!")

דוגמת פלט כאשר מזינים מספר לא חוקי עבור הבלוק הראשון:

הכנס מספר: שלום
זה לא מספר!

צלילה עמוקה

מאז שעלתה התכנות, טיפול בשגיאות הייתה חיונית. השיטות הראשוניות היו פרימיטיביות, כמו בדיקת תנאים לפני כל פעולה מסוכנת. תחביר ה-try-except של פייתון בא ממורשת של טיפול בחריגות בשפות ישנות יותר כמו C++ וג’אווה, מפשט את התהליך.

כאשר אתה try בלוק של קוד, פייתון מחפש כל חריגות. אם שגיאה צצה, הבלוק except תופס אותה. אפשר להיות ספציפיים לגבי החריגות שתופסים או לתפוס את כולם עם except ריק. עם זאת, ספציפיות תחילה היא הגישה הטובה יותר – היא מדויקת, לא רשת תפיסה לכל.

else ו-finally הם תוספות למושג זה. הבלוק else רץ אם הבלוק try חופשי משגיאות. finally הוא חבר אמין שרץ ללא תלות במה – חשבו על פעולות ניקוי.

אלטרנטיבות? ברור שיש. כמה שפות משתמשות בקודי חזרה במקום בחריגות. ייתכן שתיתקל גם בהצהרות with עבור טיפול במשאבים או באסרציות שבודקות תנאים במהלך פיתוח. אבל כאשר אנחנו מדברים על אסטרטגיות טיפול בשגיאות אמינות, הדגם של try-catch יוצא דופן בבירור ומבנה שלו.

ראה גם

הנה כמה מקורות נוספים טובים להעמקה עוד יותר: