Menu
CoddyTech

מהו טיפול בשגיאות?

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 66 מתוך 78.

תוכנית יכולה להיעצר באמצע בגלל שגיאה. הקוד הזה מבקש את משבצת 5 במערך שיש בו רק שלושה איברים:

var inventory := ["sword", "shield", "potion"]
var slot := 5
print(inventory[slot])
print("Done")

Godot מדווח על Out of bounds get index '5' והפונקציה נעצרת בשורה הזאת, ולכן Done אף פעם לא מודפס. זוהי שגיאת זמן ריצה: הקוד תקין, אבל ערך שהוא מקבל בזמן הריצה גורם לכך שאי אפשר להריץ שורה אחת.

שגיאות זמן הריצה הנפוצות ביותר הן:

  • חלוקת מספר שלם באפס, כמו ב־10 / count כאשר count הוא 0 (אותו הדבר גם לגבי %)
  • קריאת מפתח חסר באמצעות סוגריים מרובעים, כמו ב־player["mana"]
  • אינדקס מחוץ למערך, כמו inventory[5] שלמעלה

Python ו-Java יכולים ללכוד שגיאה לאחר שהיא מתרחשת, בעזרת try ו-except או catch. ל-GDScript אין חריגות ואין try. טיפול בשגיאות ב-GDScript פירושו לבדוק את הערכים לפני השורה שעלולה להיכשל, ולהחליט מה לעשות במקום:

if slot >= 0 and slot < inventory.size():
	print(inventory[slot])
else:
	print("Slot ", slot, " is empty")

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

כשהשגיאה מתרחשת בתוך פונקציה שקראת לה, הפונקציה נעצרת ומחזירה ערך ריק, כמו 0 או null, והפונקציה הקוראת ממשיכה עם הערך השגוי הזה. טעויות מסוימות גורמות להחזרת ערך שגוי בלי שגיאה: int("abc") הוא 0.

challenge icon

אתגר

קל

למערך inventory יש ארבעה מקומות, שממוספרים החל מ־0. התוכנית קוראת שורת קלט אחת: מספר של מקום (מספר שלם, שיכול להיות שלילי).

אם המקום קיים, יש להדפיס Slot , את המספר, את : ואת הפריט. עבור הקלט 2, הפלט הוא:

Slot 2: potion

אחרת, יש להדפיס Slot , את המספר ואת is empty. עבור הקלט 7, הפלט הוא:

Slot 7 is empty

מספר שלילי לעולם אינו מספר של מקום: עבור -1, יש להדפיס Slot -1 is empty. התוכנית לעולם לא אמורה להסתיים בשגיאה.

נסו בעצמכם

extends Node

func _ready():
	var inventory := ["sword", "shield", "potion", "bow"]
	var slot := int(OS.read_string_from_stdin())

	# הדפס את הפריט שבמשבצת, או ציין שהמשבצת ריקה
	pass
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר GDScript אונליין