نظرة عامة ‏‏حول معالجة الاستثناء غير المصنفة

في معالجة الاستثناء غير المصنفة ، ضع كشف On Error في بداية كتلة من التعليمات البرمجية و هو يعالج أية أخطاء تحدث داخل تلك الكتلة . و عند ‏رفع الاستثناء في الإجراء بعد تنفيذ كشف On Error ، يتم تحديد فروع البرنامج لوسيطة الخط في كشف On Error . وسيطة الخط ، أي رقم السطر أو تسمية السطر , و تشير إلى موقع معالج ‏‏الاستثناء .

أحياناً يتم انشاء الاتصال من الإجراء الأصلي للإجراء الآخر و يحدث استثناء في الإجراء المطلوب. و في مثل هذه الحالات، إذا كان الإجراء المطلوب لا يعالج ‏‏الاستثناء ، يتم ‏‏نشر الاستثناء للخلف إلى الإجراء المستدعى ، ثم ينفذ الفروع إلى وسيطة الخط.

ملاحظة

و باستخدام معالج الخطأ الغير مصنف لـ On Error يمكن أن يؤدي إلى تخفيض أداء التطبيق و ينتج التعليمات البرمجية التي يصعب تصحيحها و صيانتها. معالجة الخطأ المصنفة تعتبر أسلوبًا مستحسنًا. لمزيد من المعلومات، راجع نظرة عامة حول معالجة الاستثناء المصنفة لـ Visual Basic.

في خطأ الانتقال إلى الخط

كشف On Error GoTo Line يفترض أن التعليمات البرمجية لمعالج الخطأ تبدأ في الخط المحدد في وسيطة line المطلوبة . و إذا حدث خطأ وقت التشغيل ، فإن فروع عنصر التحكم لتسمية الخط أو رقم الخط المحدد في الوسيطة تنشط معالج الخطأ . الخط المحدد يجب أن يكون في نفس الإجراء ككشف On Error GoTo Line ; وإلا يقوم Visual Basic بإنشاء خطأ المحول البرمجي . يوضح المثال التالي استخدام معالج الخطأ مع تسمية الخط:

Sub TestSub
   On Error GoTo ErrorHandler
      ' Code that may or may not contain errors.
   Exit Sub

   ErrorHandler:
      ' Code that handles errors.
      Resume
End Sub

يتضمن المثال معالج خطأ باسم ErrorHandler . إذا كان أي من تعليمات برمجية في الروتين الفرعي TestSub ينشئ خطأ ، فإن Visual Basic ينفذ مباشرة التعليمات البرمجية التي تتبع التسمية ErrorHandler . في نهاية كتلة معالج الخطأ ، فإن كشف Resume يمرر عنصر التحكم رجوعاً إلى خط التعليمات البرمجية حيث حدث الخطأ أولاً. ثم تستمر بقية الروتين الفرعي في التنفيذ كما لو أن الخطأ لم يحدث .

ملاحظة

يجب عليك وضع كشف Exit Sub مباشرة قبل كتلة معالجة الخطأ . و إلا, يقوم Visual Basic بتشغيل التعليمات البرمجية لمعالج الأخطاء عندما تصل إلى نهاية الروتين الفرعي ، مسبباً نتائج غير متوقعة أو غير مرغوب فيها .

On Error Resume Next

يعين كشف On Error Resume Next أنه في حدث خطأ وقت التشغيل يتم تمرير عنصر التحكم إلى الكشف مباشرة بعد تلك التي حدث الخطأ فيها . عند هذه النقطة يستمر التنفيذ . يتيح لك On Error Resume Next وضع إجراءات معالج الخطأ حيث يحدث الخطأ ، بدلاً من نقل عنصر تحكم إلى موقع آخر في الإجراء .

ملاحظة

إذا استدعى الإجراء الخاص بك إجراء آخر ، يصبح كشف On Error Resume Next غير نشط أثناء تنفيذ الإجراء المطلوب. ولذلك، يجب وضع كشف On Error Resume Next في كل إجراء مستدعى يحتاج لواحد. و يعد ذلك ضروريًا لأن سلوك Resume Next ينطبق فقط على الإجراء الذي يحتوي على كشف On Error Resume Next . إذا حدث خطأ غير معالج في الإجراء المستدعى ، يتم نشر ‏‏الاستثناء إلى الإجراء المستدعى و يتم استئناف التنفيذ في كشف الاستدعاء التالي . في مثل هذه الحالات، لا تتم معالجة الخطأ .

أيضاً يمكن استخدام Resume الخاصة به خارج كشف On Error . عندما يستخدم Resume هذه الطريقة ، يرجع Visual Basic عنصر التحكم للكشف الذي سبب الخطأ . استخدم Resume بشكل عام بعد معالج الخطأ يصحح الخطأ .

Visual Basic يوفر أيضاً كشف Resume Next ، الذي يوجه عنصر التحكم إلى الخط مباشرة بعد سطر من التعليمات البرمجية التي تسببت في الخطأ . قد تستخدم Resume Next للحالات حيث لا يؤدي الخطأ إلى توقف التطبيق عن العمل . ويمكنك أيضاً استخدامه في حالة أن الخطأ لن يغير النتائج المتوقعة للروتين الفرعي الخاص بك.

تباين آخر في كشف Resume هو Resume Line، و المشابه لـ On Error GoTo Line. Resume Line يمرر عنصر التحكم إلى خط الذي تحدده في وسيطة line . يمكنك استخدام Resume Line فقط داخل معالج الخطأ .

ملاحظة

عند تصحيح التعليمات البرمجية ، يجب عليك تعطيل كشف On Error Resume Next .

تشغيل الانتقال إلى الخطأ 0

كشف On Error GoTo 0 يعطل أي معالج خطأ في الإجراء الحالي . إذا لم تقم بتضمين كشف On Error GoTo 0 ، فإن معالج الخطأ لا يزال معطّلاً عند انتهاء الإجراء المحتوي على معالج الاستثناء .

ملاحظة

لم يقصد كشف On Error GoTo 0 بتحديد خط 0 كبدء للتعليمات البرمجية لمعالج الخطأ , حتى إذا كان الإجراء يحتوي على خط ترقيم من 0 .

تشغيل الانتقال إلى الخطأ 1-

يعطل كشف On Error GoTo -1 أية معالجات ‏‏للاستثناء في الإجراء الحالي . و إذا لم تقم بتضمين كشف On Error GoTo -1 ، يتم ‏تعطيل‏ الاستثناء تلقائيًا عند انتهاء الإجراء الخاص به .

ملاحظة

لم يقصد كشف On Error GoTo -1 بتحديد خط -1 كبدء للتعليمات البرمجية لمعالج الخطأ , حتى إذا كان الإجراء يحتوي على خط ترقيم من -1 .

مثال معالجة ‏‏الاستثناء الغير المصنفة

في التعليمات البرمجية التالية، معالج الاستثناء يسمى DivideByZero و يعالج الخطأ المحدد — من محاولة القسمة على صفر . في حالة حدوث خطأ مختلف ، Visual Basic يرفع خطأ وقت التشغيل و يوقف التطبيق .

Sub ErrorTest ()
' Declare variables.
   Dim x As Integer, y As Integer, z As Integer
   ' The exception handler is named "DivideByZero".
   On Error GoTo DivideByZero
   ' The main part of the code, which might cause an error.
   x = 2
   y = 0
   z = x \ y

   ' This line disables the exception handler.
   On Error GoTo 0
      Console.WriteLine(x & "/" & y & " = " & z)

   ' Exit the subroutine before the error-handling code.
   ' Failure to do so can create unexpected results.
   Exit Sub

   ' This is the exception handler, which deals with the error.
   DivideByZero:
   ' Include a friendly message to let the user know what is happening.
   Console.WriteLine("You have attempted to divide by zero!")

   ' Provide a solution to the error.
   y = 2

   ' The Resume statement returns to the point at which
   ' the error first occurred, so the application
   ' can continue to run.
   Resume

End Sub

راجع أيضًا:

المهام

كيفية القيام بما يلي: استرداد معلومات من كائن الخطأ

المرجع

نهاية كشف حساب

Err

إنهاء بيان (Visual Basic)

على بيان الخطأ (Visual Basic)

بيان السيرة الذاتية

المبادئ

كائن Err في معالجة‏‏ الاستثناء غير المصنف

مقدمة حول معالجة ‏‏الاستثناء

أنواع الأخطاء

اختيار متى يتم استخدام الاستثناء المصنف و غير المصنف‏‏ لمعالجة الاستثناء