تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الاستثناءات Exceptions اصطياد الأخطاء ومعالجتها
#1
كاتب الموضوع : samerselo


الاستثناءات Exceptions اصطياد الأخطاء ومعالجتها


التقاط استثناء معين

لالتقاط استثناء نستعمل بلوك Try ... Catch بشكل عام عندما ينفذ البرنامج عملية معينة قد تولد استثناء فلعمل ذلك نقوم بوشع تلك الشيفرة البرمجية بين عبارتي Try و Ctach و بعد العبارة Catch نستكشف الاستثناءات الحاصلة

كود :
Try
C = A + B
Catch Ex as OverflowException
ويتيح الجزء Catch للبرنامج اكتشاف استثناء معين والرد عليه فمثلا يمكننا التقاط استثناء القسمة على صفر Devided By Zero

كود :
Try
C = A Mod B
TextBox3.Text = C.ToString()
Catch Ex as DividedByZeroException
MsgBox("Devided By Zero.")
TextBox3.Text = "Infinity"
End Try
وبنفس الطريقة يمكننا استكشاف استثناء فيضان Overflow Exception

كود :
Dim A, B, C As Integer

Try
A= TextBox1.text
B = TextBox2.Text

C = A + B
Catch Ex as OverflowException
MsgBox("Overflow.")
TextBox3.Text = "Infinity"
End Try
وحتى أيضا يمكننا استخدامه للكشف عن اسم ملف غير صالح

كود :
Dim Fname As New String = "D:\Some Folder\FileName.ext"
Dim Sfl as new StreamReader
Try
Sfl = New StreamReader(Fname)
TextBox1.Text = Sfl.ReadToEnd()
Sfl.Close
Catch Ex As FileNotFoundException
MsgBox("File Not Found")
End Try
فحص عدة استثناءات
عندما يمكن أن تؤدي العملية التي تقوم بتنفيذها إلى عدة استثناءات مختلفة يمكنك تحديد سلسلة من الجمل Catch لمعالجة تلك الاستثناءات

كود :
Dim FileDB As New OpenFileDialog()

FileDB.Filter = "All files | *.* | Text files | *.txt"

FileDB.FilterIndex = 2
FileDB.InitialDirectory = "C:\Temp"
FileDB.AddExtension = True
FileDB.DefaultExt = "txt"

' Prevent dialog box from validating file
FileDB.CheckFileExists = False
FileDB.CheckPathExists = False

If (FileDB.ShowDialog() = DialogResult.OK) Then
Dim SourceFile As StreamReader

Try
SourceFile = New StreamReader(FileDB.FileName)

TextBox1.Text = SourceFile.ReadToEnd()

SourceFile.Close()
Catch Except As DirectoryNotFoundException
MsgBox("Error: " & Except.Message)
Catch Except As FileNotFoundException
MsgBox("Error: " & Except.Message)
Catch Except As Exception
MsgBox("Error: " & Except.Message)
End Try
Else
MsgBox("User selected Cancel")
End If
معالجة الاستثناءات باستعمال بلوك Catch عام
عندما ينفذ كائن عملية نيابة عن البرنامج فقد يولد نطاقا واسعا من الاستثناءات بناء على سير تنفيذ البرنامج وقد لاتهمك ما هي هذه الاستثناءات بقدر ما يهمك أنه قد حصل هناك استثناء ما ولمعالجة الاستثناءات بغض النظر عن نوعها فإننا لا نحدد استثناء معينا بل نستخدم

كود :
Catch Ex as Exception
مثال

كود :
Try

..... Some Code Here

Catch Ex As Exception
MsgBox("Error: " & Ex.Message)
End Try
إجراء التظيف بعد حدوث استثناء

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

كود :
Dim FileDB As New OpenFileDialog()

FileDB.Filter = "All files | *.* | Text files | *.txt"

FileDB.FilterIndex = 2
FileDB.InitialDirectory = "C:\Temp"
FileDB.AddExtension = True
FileDB.DefaultExt = "txt"

' Prevent dialog box from validating file
FileDB.CheckFileExists = False
FileDB.CheckPathExists = False

If (FileDB.ShowDialog() = DialogResult.OK) Then
Dim SourceFile As StreamReader

Try
SourceFile = New StreamReader(FileDB.FileName)
Catch Except As Exception
MsgBox("Error: " & Except.Message)
End Try

If (Not SourceFile Is Nothing) Then
Try
TextBox1.Text = SourceFile.ReadToEnd()
Catch Except As Exception
MsgBox("Error: " & Except.Message)
Finally
MsgBox("In finally statements")
SourceFile.Close()
End Try
End If
Else
MsgBox("User selected Cancel")
End If
وفي بعض الحالات قد تكون هناك أوقات لاتريد استكمال تنفيذ البلوك Try ... Catch عندها تستخدم العبارة Exit Try للخروج من البلوك حيث سينفذ بعدها أول سطر كود يلي End Try

كود :
Try

.... Some Code

If SomeCondition Then Exit Try

Catch Ex as Exception

Exit Try

.... Rest of Try Block
إطلاق استثناءاتك الخاصة
هناك أوقات تحتاج فيها لتكوين استثناء خاص بك عندها ستحتاج بكل بساطة لإنشاء فئة Class ترث الفئة Exception - راجع دروس الوراثة في المنتدى - فعلى سبيل المثال يمكننا توليد استثناء باسم InvalidEMailException كما يلي

كود :
Public Class InvalidEMailException
Inherits System.Exception

Sub New(ByVal Message As String)
MyBase.New(Message)
End Sub
End Class
و بالطبع يمكنك انشاء طرق وخصائص في هذه الفئة حسب احتياجاتك كأي فئة أخرى وفي مثالنا المبسط هنا أنشأنا مشيد الفئة فقط وبعد إنشاء فئة الاستثناء الخاصة بنا يمكننا توليد الاستثناء باستخدام العبارة Throw

كود :
Throw New InvalidEMailException("Envalid Email Please Correct")
وفيما يلي مثال آخر

كود :
Public Class MyException
Inherits System.Exception

Sub New(ByVal Message As String)
MyBase.New(Message)
End Sub
End Class

Public Class Form1
Inherits System.Windows.Forms.Form

.....

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

Try
MsgBox("About to generate custom exception")
Throw (New MyException("** Custom Message **"))
Catch Ex As MyException
MsgBox("Custom Exception thrown " & Ex.Message)
End Try

End Sub

......

End Class
}}}}
تم الشكر بواسطة:
#2

مرفق ملف يحتوي قائمة ببعض فئات الأخطاء وتوضيح بسيط لكل منها


الملفات المرفقة
.zip   بعض فئات الأخطا&#1.zip (الحجم : 6.75 ك ب / التحميلات : 21)
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  معلومة - الاستثناءات ( Exceptions ) RaggiTech 0 534 06-10-12, 11:00 PM
آخر رد: RaggiTech
  معالجة الأخطاء RaggiTech 1 560 05-10-12, 01:37 AM
آخر رد: RaggiTech
  إكتشاف الأخطاء والمشكلات ومعالجتها- الجزء الأول RaggiTech 0 699 02-10-12, 01:06 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم