קורס פיתוח מתקדם בפייתון
פרק
>
רמה
טיפול בחריגות
חריגות מרובות
מטרה
אסוף ואחסן כראוי מספר ציוד רפואי בתוך תיבות באמצעות חריגות מרובות.
מחסני הגג צריכים להתחדש, חלק מהציוד נוצל אך לא הוחלף. יש הזמנה לחומרים נוספים במזכיר באחד המחסנים, ויהיה רעיון טוב לטפל בכך. עם זאת, יש מגוון חומרים שונים שצריך לשלב ולאחסן בתוך תיבות.
בגלל סוגי הנתונים השונים וכמות החומרים הדרושים למילוי התיבות, אנו עלולים להיתקל בטעויות שונות. ניתן להשתמש ב-try / except כדי ללכוד טעויות אפשריות ולתקן בעיות, אך מה קורה כאשר יש מספר טעויות אפשריות שיכולות להתרחש בפעולה אחת? כדי להתמודד עם זה, נוכל לציין אילו חריגות אנו מנסים ללכוד ולהשתמש בחריגות מרובות.
כדי להתחיל, לך לסימן ה-X הזהב ופנה אל הדלת, השתמש בפונקציה open() כדי להיכנס למחסן. כשאתה בתוך המחסן, לך לסימן ה-X הכהה ופנה ימינה כדי להשתמש בפונקציה read() ולבדוק אילו חומרים וכמויות מוזמנות במזכיר שעל השולחן. במזכיר נכתב מידע על קבועי רשימות, כולל הציוד וההזמנות עבורם. לאחר מכן, לך לסימן ה-X הבהיר בתוך המחסן, פנה אל התיבה ותפס את קבוע הרשימה pads של החומרים הפנימיים באמצעות הפונקציה collect(), כך: player.collect(pads) .
בתוך המחסן קיימים מלאי של "peroxide" ו-"isopropyl", לך ואסוף את כולם ואז צא החוצה ופנה לסימן ה-X הכהה מעל שטיח סגול. על השטיח הסגול, תוך כדי שאתה פונה לתיבה, השתמש בפונקציה collect() כדי לתפוס את "water bottle", עבור לסימן ה-X הכהה מעל השטיח הצהוב והשתמש בפונקציה collect() כדי לתפוס את "glass bottle".
כעת, לאחר שאספת את הפריטים, הגיע הזמן למלא את ההזמנה ולהציב את כל החומרים בתוך תיבות המחסן שבימין. לשם כך, נכניס תחילה את "water bottle", "peroxide", ו-"isopropyl" לתוך רשימה בשם supplies. על סמני ה-X הכהים מעל שטיחי ה-red, green ו-blue נשתמש בתיבות לאחסון הציוד הרפואי. לשם כך נקים שלוש רשימות: blue_crate = [], green_crate = [] ו-red_crate = [].
לפני הצבת כל הפריטים, עלינו למלא את כל הרשימות עם החומרים. לשם כך, נשתמש בלולאה כדי לעבור על הרשימות ולשלב אותן לרשימה אחת. פעולה זו תכניס את כל supplies לרשימה ותחלק את מספר הפריטים ב-pads בהתאם ל-order במזכיר שבמחסן.
for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])
למרות זאת, תבחין שטעויות יופיעו, למרות שהכל בוצע כראוי והקוד תקין. הבעיה היא, שלרשימה supplies יש רק שלושה (3) פריטים, אך הלולאה רצה חמש (5) פעמים וגורמת ל-Index Error. בינתיים, לרשימה pads יש לא רק שלושה (3) פריטים, אלא שאחד מערכי ההזמנה הוא 0, וכל מספר המחולק ב-0 גורם ל-Zero Division Error כיוון שאין מספר שיכול להתחלק ב-0 במתמטיקה.
כאן שימוש בחריגות מרובות הוא שימושי; אנו משתמשים בבלוקים try / except כדי ללכוד את הטעויות ולאפשר לנו להתקדם בקוד. מאחר ומתרחשות שתי טעויות, עלינו לזהות כל טעות על מנת ללכוד את החריגה המתאימה. הדבר נעשה על ידי הרחבת בלוקי ה-except כך: except IndexError: ו-except ZeroDivisionError:. לדוגמה:
for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)
שגיאת ה-Index Error מתוקנת על ידי מילוי המקומות החסרים ברשימה עם "glass bottle" ושגיאת ה-Zero Division Error מטופלת על ידי הוספת הערך 0 כאשר מתרחשת פעולה אסורה.
בצע את הפעולה הזו עבור הרשימות blue_crate = [], green_crate = [] ו-red_crate = []. לך לסימן ה-X הכהה מעל שטיחי ה-blue, green ו-red והשתמש בפונקציה place() כדי לאחסן את הרשימות בתיבות המתאימות על מנת להשלים את הרמה.