קורס פיתוח מתקדם בפייתון
פרק
>
רמה
טיפול בחריגות
חריגות מותאמות אישית
מטרה
השתמש בחריגות מותאמות אישית לאיסוף הודעות עם הזמנות מוצרים ולשליחתן באמצעות יונה נושאת.
חלק מההודעות מופצות ברחבי החווה ובתחנות אחרות באמצעות יונה שליח, וייתכן שיהיה רעיון טוב לשלוח כמה הודעות כדי להתקדם בלוח הזמנים. עד כה טיפלנו בשגיאות תוך שימוש בחריגות רגילות, אך לפעמים תוכל להפיק תועלת ביצירת חריגות מותאמות אישית עבור תרחישים מאוד ספציפיים. אנו נעדכן הודעות ונבחר יונים על ידי זיהוי הפריטים הנכונים באמצעות החריגות המותאמות שלנו.
החריגות המותאמות נבנות על ידי יצירת מחלקות; על ידי הוספת הסעיף (Exception) ניתן לעשות שימוש חוזר במחלקה לצורך טיפול בחריגות. לצרכינו, ניצור שתי חריגות: InvalidLocation אשר מופעלת כאשר מחרוזת ספיציפית אינה עומדת באימות, ו- UnsuitableSelection אשר משמשת לבדיקה אם מספר עובר סף מסוים.
class InvalidLocation(Exception):
"Raised when location is invalid"
pass
class UnsuitableSelection(Exception):
"Raised when pidgeon is 2 or younger"
pass
כעת, כשהמחלקות מוגדרות, הגיע הזמן לאסוף את התזכורות כדי שיוכלו להישלח. צור רשימה בשם prep כדי לאחסן ולשלב את הרכיבים הנדרשים להחלפה הקרובה. עבור לסמל ה־X המוצלל מעל השטיח האדום, על שרשרת השולחנות עם סימני X מלפנים, ונחפש הודעות שיש בהן הזמנות ליעד המערבי של החווה.
ישנם ארבעה קבועים משתנים בחלק זה: red_memo, blue_memo, green_memo ו- orange_memo. רק הודעות שסומנו למשלוח למגזר "west" נאספות כדי שישלחו. כדי לקבוע אם נאסוף הודעה או לא, נשתמש בבלוקי הקוד try/except ו- else בשיתוף עם החריגה המותאמת InvalidLocation. כדי להשתמש בחריגה המותאמת, יש שבבלוק ה־try תיבדק סימון ההודעה כ־"west" ואם לא, יש להפעיל את החריגה. בלוק ה־except יאשר שההודעה אינה תקפה, ובלוק ה־else יאסוף ויוסיף את ההודעה לרשימת prep אם אכן מיועדת למגזר "west". לדוגמה:
try: if red_memo != "west": raise InvalidLocation except InvalidLocation: player.speak("This is not an order that needs to be sent out") else: player.collect(red_memo) prep.append(red_memo)
עבור לכל אחד מהסמלים המוצלים (X) מעל השטיחים הצבועים הנמצאים מול השולחנות, והפעל את רצף החריגה עם הקבוע המשתנה המתאים לכל צבע.
לאחר שאספת את ההודעות, עבור לסמל X הזהוב מול הדלת והשתמש בפונקציה open() כדי לגשת לבית היונים. בעת ההגעה פנימה, עבור לסמל X הבהיר, הפנה את עצמך, והשתמש בפונקציה close() כדי לסגור את הדלת ולהבטיח שיונים לא יברחו.
עבור לסמל X המוצלל מעל השטיח הסגול, על החיפרונים נבדוק אם היונה בת מספיק גיל כדי להעביר הודעה או אם היא גוזלת שאינה מסוגלת לבצע משלוח. קיימים ארבעה קבועים משתנים נוספים בחלק זה: purple_pen, yellow_pen, white_pen ו- pink_pen, התואמים לכל שטיח צבעוני. נשתמש באותה טכניקה כמו עם ההודעות, תוך שימוש במחלקה השנייה שהוגדרה.
השתמש בבלוקי הקוד try/except ו- else עם החריגה המותאמת UnsuitableSelection כדי לבדוק אם היונה בת מספיק גיל לבצע את המשלוח. בלוק ה־try מאמת אם הקבוע המשתנה שמייצג את החיפרון כולל יונה שהיא קטנה משנתיים. אם היונה אינה מתאימה, בלוק ה־except מופעל, ולאחר מכן בלוק ה־else מתבצע ומוסיף את היונה לרשימת prep כדי שתוכל להעביר את ההודעה.
try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")
עבור לכל סמל X מוצלל מעל השטיחים הצבועים, והשתמש ברצף זה עם הקבוע המשתנה המתאים לכל שטיח צבעוני. לאחר שאספת את היונים וההודעות, עבור לסמל X הזהוב בתחתית והשתמש בפונקציה place() עם רשימת prep שיצרת, כדי לשלוח את היונים להעברת הודעות ולהשלים את הרמה.