Lua:
טיפול בשגיאות

איך לעשות זאת:

לואה משתמשת בשתי פונקציות עיקריות לטיפול בשגיאות: pcall ו-xpcall. הנה איך אתם משתמשים בהן:

function might_fail()
    if math.random() > 0.5 then
        error("אופס! משהו השתבש.")
    else
        print("הכל בסדר!")
    end
end

-- שימוש ב-pcall
local success, errorMessage = pcall(might_fail)

if success then
    print("הצלחה!")
else
    print("נתפסה שגיאה:", errorMessage)
end

-- שימוש ב-xpcall עם פונקציית טיפול בשגיאות
function myErrorHandler(err)
    print("מטפל השגיאות אומר:", err)
end

local status = xpcall(might_fail, myErrorHandler)
print("האם הקריאה הצליחה?", status)

דוגמה לפלט יכולה להיות:

נתפסה שגיאה: אופס! משהו השתבש.
מטפל השגיאות אומר: אופס! משהו השתבש.
האם הקריאה הצליחה? שקר

או, אם שגיאה לא קרתה:

הכל בסדר!
הצלחה!
הכל בסדר!
האם הקריאה הצליחה? אמת

עיון נוסף

טיפול בשגיאות, או “טיפול בחריגות,” לא תמיד היה קיים. תוכניות קודמות קרסו – הרבה. עם התפתחות התכנות, כך גם הצורך ביציבות. השיטה של לואה היא פשוטה לעומת שפות אחרות. אין בלוקים של try/catch, רק pcall ו-xpcall. הראשונה מגנה על קריאה לפונקציה, ומחזירה מצב וכל שגיאה אפשרית. השנייה מוסיפה פונקציית טיפול בשגיאות, שימושית לניקוי מותאם אישית או לרישום.

אלטרנטיבה בלואה היא להשתמש ב-assert, שיכול לשמש מטרה דומה על ידי זריקת שגיאה אם התנאי שלו הוא שקר. אבל זה לא גמיש כמו pcall במצבי טיפול בשגיאות מורכבים.

בתוך פנים, pcall ו-xpcall פועלים על ידי הקמת “סביבה מוגנת” עבור הפונקציה לפעול בה. אם שגיאה צצה, הסביבה תופסת אותה ויכולה או לטפל בה מיד או להעביר אותה חזרה עבור התכנית לטפל.

ראה גם

  • הספר “תכנות בלואה” (מהדורה שלישית), זמין ב https://www.lua.org/pil/ לקריאה מעמיקה על טיפול בשגיאות (סעיף 8.4).
  • מדריך הקישור הרשמי של לואה 5.4: https://www.lua.org/manual/5.4/ - למידע העדכני ביותר על פונקציות טיפול בשגיאות של לואה.
  • ויקי למשתמשי לואה על טיפול בשגיאות: http://lua-users.org/wiki/ErrorHandling – לתובנות של הקהילה ודפוסים.