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 – לתובנות של הקהילה ודפוסים.