מתקדם > תכנות מונחה עצמים > שגיאות והטיפול בהן

שגיאות והטיפול בהן

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

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

למשל, גישה למפתח לא-קיים במילון יגרום לזריקת שגיאת KeyError, חיפוש ערך שאינו קיים ברשימה יגרום לזריקת שגיאת ValueError, פנייה למשתנה שאינו קיים במערכת יגרום לזריקת שגיאת NameError, וכן הלאה.

כאשר אנו כותבים קוד בתוך הממשק האינטראקטיבי של פיתון (IDLE) וגורמים לזריקת שגיאה, היא מודפסת על המסך בצבע אדום. מצב זה נקרא "שגיאה לא מטופלת" כאשר השגיאה נזרקה, לא היה קטע קוד שזיהה את השגיאה וטיפל בה באופן מיוחד, ולכן היא פעפעה מעלה עד להתנהגות הרגילה של פיתון במקרה זה, שהיא להדפיס את השגיאה (ביחד עם עוד מידע לצרכי אבחון) ולעצור את ביצוע התכנית. אם התנהגות כזו קורית בתוך הממשק האינטראקטיבי, זה לא כל כך נורא, אולם אם הדבר קורה באמצע תכנית שמשתמש מריץ, התכנית פשוט תקרוס...

אם כן. כיצד מונעים משגיאה שנזרקת לעצור את התכנית כולה? לשם כך עלינו "לטפל" בשגיאה. לעתים שגיאות נוצרות עקב טעות בקוד (גישה למשתנה לא קיים) אך לרוב הן תוצר של תהליך שאנו יכולים לצפות מראש שהוא עלול להיכשל – אם אנו פותחים קובץ, יכול להיות שהוא לא יהיה קיים. אם אנו מתחברים לשרת, יכול להיות שהחיבור ייכשל. הדרך להתכונן מראש לטיפול בשגיאות כאלה היא בעזרת בלוקים של try..except . 

>>> fsock = open("/notthere", "r")
Traceback (innermost last):
File "<interactive input>", line 1, in ?

IOError: [Errno 2] No such file or directory: '/notthere'

>>> try:

... fsock = open("/notthere")

... except IOError:

... print "The file does not exist, exiting gracefully"

... print "This line will always print"

The file does not exist, exiting gracefully

This line will always print

העבירו את הסמן מעל השורות המסומנות לקבלת הסברים

למרות שזריקת שגיאות הוא מנגנון קשיח ולא סבלני לשגיאות (שגורם לעצירת התכנית על כל שגיאה שאינה מטופלת) הוא מבטיח שהתכנית לא תמשיך להתבצע על מידע חסר, לא שלם או זבלי.

 

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