عبارة Visual Basic) Try...Catch...Finally)

توفر طريقة لمعالجة بعض أو كل الأخطاء المحتملة التي قد تحدث في مقطع محدد من التعليمات البرمجية، أثناء تشغيل التعليمات البرمجية.

Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ]
End Try

الأجزاء

  • tryStatements
    اختياري. عبارات حيث يمكن للخطأ أن يحدث. يمكن أن تكون عبارة مركبة.

  • Catch
    اختياري. يسمح لمقاطع Catch متعددة. في حالة حدوث استثناء أثناء معالجة مقطع Try، كل عبارة Catch يتم فحصها بترتيب نصي لتحديد ما إذا كانت تعالج الاستثناء، مع exception الذي يمثل الاستثناء الذي تم طرح.

  • exception
    اختياري. أي اسم متغير. قيمة exception الأولية هي قيمة الخطأ المطروح. تستخدم مع Catch لتحديد خطأ الذي تم التقاطه. إذا أهمل، العبارة Catch تلتقط أي استثناء.

  • type
    اختياري. تحدد نوع فلتر الفئة. إذا كانت قيمة exception من النوع المحدد من قبل type أو من نوع مشتق، يصبح المعرف ملزما لكائن الاستثناء.

  • When
    اختياري. عبارة Catch مع بند When تلتقط استثناءات فقط حين expression تقيم إلى True. بند When يتم تطبيقه فقط بعد التحقق من نوع ‏‏ الاستثناء, و expression قد يشير إلى معرّف يمثل الاستثناء.

  • expression
    اختياري. يجب أن تكون قابلة للتحويل إلى ضمناً إلى Boolean. أي تعبير يصف عامل تصفية عام. يستخدم عادة للتصفية حسب رقم الخطأ. يستخدم مع الكلمة الأساسية When لتحديد الظروف التي تحتها تم التقاط الخطأ.

  • catchStatements
    اختياري. عبارات لمعالجة الأخطاء التي تحدث في المقطع Try المقترن. يمكن أن تكون عبارة مركبة.

  • Exit Try
    اختياري. كلمة أساسية تخرج من بنية Try...Catch...Finally. يستأنف التنفيذ مع التعليمات البرمجية التي تلي مباشرة العبارة End Try. العبارة Finally سيتم تنفيذها. غير مسموح بها في مقاطع Finally.

  • Finally
    اختياري. مقطع Finally دوماً يتم تنفيذه عندما يترك التنفيذ أي جزء من العبارة Try.

  • finallyStatements
    اختياري. عبارات يتم تنفيذها بعد ظهور كل معالجات الأخطاء الأخرى.

  • End Try
    تنهي بنية Try...Catch...Finally.

ملاحظات

إذا كنت تتوقع أن استثناء معين قد يحدث أثناء مقطع محدد من التعليمات البرمجية, ضع التعليمات البرمجية في مقطع Try واستخدام مقطع Catch للحفاظ على التحكم و معالجة‏‏ الاستثناء إذا حدث. يمكنك استخدام العديد من مقاطع Catch المختلفة حسب الضرورة داخل بنية Try.

المتغيرات المحلية من مقطع Try لا تتوفر في مقطع Catch لأنها مقاطع منفصلة. إذا كنت تريد استخدام متغير في أكثر من مقطع، عرف المتغير خارج البنية Try...Catch...Finally.

المقطع Try يحتوي على تعليمات برمجية يمكن أن يحدث بها خطأ, و المقطع Catch يحتوي على تعليمات برمجية لمعالجة أية أخطاء هل تحدث. إذا حدث خطأ في مقطع Try يتم تمرير عنصر تحكم البرنامج إلى عبارة Catch مناسبة للتصرف فيه. الوسيطة exception هي مثيل للفئة Exception أو فئة مشتقة من فئة Exception. مثيل الفئة Exception يناظر الخطأ الذي حدث في المقطع Try. يحتوي المثيل على معلومات حول خطأ. يتضمن هذا, بين أشياء أخرى رقمه و رسالة.

إذا كانت عبارة Catch لا تحدد وسيطة exception، فإنها تلتقط أي نوع من استثناء النظام أو التطبيق. يجب دوماً استخدام التنوع كمقطع Catch أخير في بنية Try...Catch...Finally، بعد التقاط كل الاستثناءات المحددة كما توقعت. تدفق عناصر التحكم لايمكنه أبداً الوصول إلى مقطع Catch الذي يتبع Catch بدون وسيطة exception.

إذا كان لديك عبارة أو أكثر يجب أن تنفذ قبل الإنتهاء من البنية Try, استخدم مقطع Finally. يمرر التحكم إلى مقطع Finally قبل الخروج من بنية Try. يكون هذا صحيحاً حتى في حالة حدوث استثناء في أي مكان داخل بنية Try.

لا يمرر عنصر التحكم من مقطع Try أو Catch إلى المقطع Finally المطابق في الحالات التالية:

في حالات الثقة الجزئية، مثل تطبيق تتم استضافته على شبكة اتصال مشتركة Try...Catch...Finally لا يلتقط استثناءات الأمان التي تحدث قبل استدعاء الأسلوب الذي يحتوي الاستدعاء. المثال التالي، عند وضعه على خادم مشترك وتشغيله من هناك، ينتج الخطأ "System.Security.SecurityException: فشل الطلب." لمزيد من المعلومات حول استثناءات الأمان، راجع الفئة SecurityException.

Private Sub Button1_Click(ByVal sender As System.Object, 
    ByVal e As System.EventArgs) Handles Button1.Click

    Try
        Process.Start("https://www.microsoft.com")
    Catch ex As Exception
        MsgBox("Can't load Web page" & vbCrLf & ex.Message)
    End Try
End Sub

في مثل حالة الثقة الجزئية، يجب عليك وضع العبارة Process.Start في Sub منفصل. الاستدعاء الأولي إلى Sub سيفشل. هذا يمكّن Try...Catch من التقاطه قبل Sub الذي يحتوي Process.Start الذي يتم تشغيله و يتم انتاج استثناء أمان.

ملاحظة

إذا كانت عبارة Try لا تحتوي مقطع Catch واحد على الأقل, يجب أن تحتوي على مقطع Finally.

مثال

يوضح المثال المبسط التالي بنية العبارة Try...Catch...Finally.

Public Sub TryExample()
    Dim x As Integer = 5   ' Declare variables.
    Dim y As Integer = 0
    Try                    ' Set up structured error handling.
        x = x \ y          ' Cause a "Divide by Zero" error.
    Catch ex As Exception When y = 0        ' Catch the error.
        Beep()
        MsgBox("You tried to divide by 0.") ' Show an explanatory message.
    Finally
        Beep()             ' This line is executed no matter what.
    End Try
End Sub

راجع أيضًا:

المرجع

إنهاء الكشف

Err

عبارة الخروج Vsual Basic) )

عبارة Visual Basic) On Error)

Exception

بيان GoTo