تخطَّ إلى المحتوى

16. معالجة الأخطاء

أن تكتب دالة قد تفشل، وتعالج فشلها: بقيمة بديلة، أو بكتلة تعرف سبب الخطأ، أو بتمريره إلى من استدعاها.

  • دالة قد تفشل تكتب ! قبل نوع إرجاعها: !عدد. وعند الفشل ترجع خطأ.اسم.
  • تعرّف أسماء أخطائك في كتلة اخطاء: في أول الملف.
  • ن = ف() والا 0: إن فشلت فالقيمة 0. ووالا خ: ثم كتلة: فيها خ اسم الخطأ، وآخر سطر فيها هو القيمة البديلة.
  • جرّب ف() داخل دالة !نوع: إن فشلت ف خرجت دالتك بالخطأ نفسه.
  • نسيان المعالجة خطأ ترجمة: لا يصل برنامجك إلى التشغيل وفيه فشل لم تقرر ماذا تفعل به.
خطأ من تعريفك، ومعالجته بطريقتين
اخطاء:
قسمة_على_صفر
داله اقسم(ا عدد, ب عدد) !عدد:
اذا ب == 0:
ارجع خطأ.قسمة_على_صفر
ارجع ا / ب
اطبع(اقسم(10, 2) والا -1)
اطبع(اقسم(10, 0) والا -1)
ن = اقسم(7, 0) والا خ:
اطبع("فشل: ", خ)
0
اطبع(ن)
مخرجات مسجّلة من المجمّعmeem 15_اخطاء.م · meem 0.10.0+b01b55f
5-1فشل: قسمة_على_صفر0

جرّب تمرّر أول فشل إلى من استدعى الدالة:

جرّب
داله مجموع_نصين(ا نص, ب نص) !عدد:
س = جرّب عدد(ا)
ص = جرّب عدد(ب)
ارجع س + ص
اطبع(مجموع_نصين("4", "5") والا -1)
اطبع(مجموع_نصين("4", "خمسة") والا -1)
مخرجات مسجّلة من المجمّعmeem 15_جرب.م · meem 0.10.0+b01b55f
9-1

الحدود اليوم (0.10.0): الخطأ اسم فقط بلا بيانات معه (لا «أي سطر» ولا «أي ملف»)، وتوقيع الدالة لا يذكر أي الأخطاء ترجع. وأخطاء التشغيل مثل القسمة على صفر أو الفهرس خارج القائمة ليست من هذا النوع: لا تُعالَج، وتنهي البرنامج برمز 3. التفصيل في التعامل مع الأخطاء.

دالة اقرأ_عمر(ن نص) !عدد تحوّل النص إلى عدد بـ جرّب، وترجع خطأك عمر_غير_معقول إن كان العمر أقل من 0 أو أكثر من 150. جرّبها على «30» و«ثلاثون» و«200»، واطبع لكل حالة سبب الفشل بـ حالات.

اعرض الحل
الحل
اخطاء:
عمر_غير_معقول
داله اقرأ_عمر(ن نص) !عدد:
ع = جرّب عدد(ن)
اذا ع < 0 او ع > 150:
ارجع خطأ.عمر_غير_معقول
ارجع ع
لكل ن في ["30", "ثلاثون", "200"]:
ع = اقرأ_عمر(ن) والا خ:
حالات خ:
حاله خطأ.عمر_غير_معقول:
اطبع(ن, ": عمر غير معقول")
حاله _:
اطبع(ن, ": ليس عدداً (", خ, ")")
تجاوز
اطبع(ن, ": العمر ", ع)
مخرجات مسجّلة من المجمّعmeem 15_حل.م · meem 0.10.0+b01b55f
30: العمر 30ثلاثون: ليس عدداً (صيغة_خاطئة)200: عمر غير معقول

استعمال نتيجة !عدد كأنها عدد، بلا جرّب ولا والا:

يسبب الخطأ
داله نصف(ن نص) !عدد:
ارجع جرّب عدد(ن) / 2
اطبع(نصف("8"))
مخرجات مسجّلة من المجمّعmeem 15_غير_معالج.م · meem 0.10.0+b01b55f
​[خطأ دلالي E0399] سطر 4:6 - 'نصف(...)' من النوع '!عدد' (قد يفشل) ولا يُستعمل كأنه 'عدد'   4 | اطبع(نصف("8"))     |      ^~~  تلميح: عالج الخطأ في موضعه:  جرّب نصف(...)  (يمرّر الخطأ إلى مستدعي الدالة)   أو   نصف(...) والا قيمة_بديلة   أو   نصف(...) والا خ:  ثم كتلة تعالج «خ»

رمز الخروج: 2

في فهرس الأخطاء: E0399

والإصلاح: اطبع(نصف("8") والا 0)، أو جرّب داخل دالة ترجع !نوع.

معالجة الأخطاء في المرجع · التعامل مع الأخطاء