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 יוצא דופן בבירור ומבנה שלו.
ראה גם
הנה כמה מקורות נוספים טובים להעמקה עוד יותר:
- התיעוד הרשמי של פייתון על שגיאות וחריגות: תיעוד פייתון – שגיאות וחריגות
- המדריך של Real Python לנושא: Real Python - בלוק try/except/else/finally
- דיון מושכל על מיטב הליכים לטיפול בשגיאות: Stack Overflow – איך להתעלם באופן נכון מחריגות?