Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdFrieda Pieters Laatst gewijzigd meer dan 9 jaar geleden
1
Visual Basic.NETPag.1 Hoofdstuk 8 – Fout afhandeling Inleiding Structured Exception Handling Hoe fouten opvangen Geen foutafhandeling Alle fouten opvangen Specifieke fouten opvangen Throw exceptions Finally block Programmer-Defined Exception Classes
2
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 2 8.1 Inleiding Exception Indicatie van een onverwacht probleem at run-time Zonder foutafafhandeling wordt programma afgesloten met een run-time error. Waarom aan foutafhandeling bij run-time errors doen? Als je niet wilt dat het programma met een foutmelding wordt afgesloten een aantal alternatieve acties uitvoeren Je kan eventueel toch verder gaan met de uitvoering van het programma of als een andere dan de standaardfoutmelding moet verschijnen
3
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 3 8.2 Exception Handling Overview VB.NET gebruikt structured exception handling Syntax foutafhandeling (error handling) bij exceptions :... Try ‘bevat de code die moet worden uitgeprobeerd, en die een fout kan veroorzaken Catch ‘reageren op de uitzonderingen die kunnen voorkomen in Try-blok Geparametriseerd : vangt specifiek exceptions op Niet geparametriseerd : vangt alle exceptions op Finally ‘optioneel blok indien catch blokken bestaan ‘bevat code die altijd moet worden uigevoerd, ongeacht welke uitzondering plaatsvindt End Try...
4
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 4 8.2 Exception Handling Overview I.g.v. exception (throw point) Wordt opgevangen door een exception handler (in aanroepketen) Fout wordt afgehandeld In het andere geval (geen bijhorende exception handler) Debug mode –Ignore : ga verder met continue execution –Break : View in debugger Standard execution mode –Continue : ga verder met uitvoering –Quit : Beëindig programma
5
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 5 8.2 Exception Handling Overview Generatie van fout Voorbeeld : openen bestand en lengte bepalen Dim lngSize as Long Dim s as FileStream s=File.open(txtFileName.text, FileMode.Open) lngSize = s.Length s.Close() Wat kan er allemaal misgaan? –File bestaat niet –Pad bestaat niet –Drive is niet beschikbaar(netwerkdrive bvb) –Je hebt geen rechten om file te openen –...
6
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 6 8.3 Afhandelen van fouten Geen foutafhandeling Runtime vangt fout op en geeft melding aan de gebruiker
7
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 7 8.3 Afhandelen van fouten Afhandelen van alle fouten (1 exceptionhandler) Geven van melding als een fout zich heeft voorgedaan Try s=File.open(txtFileName.text, FileMode.Open) lngSize = s.Length s.Close() Catch Messagebox.Show(“Fout by openen bestand”) End Try
8
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 8 8.3 Afhandelen van fouten Wat als je wat meer uitleg wenst te geven over de fout De Exception klasse in de System namespace bevat info over de runtime error Declareer een variabele van het type Exception Try ‘ code die een uitzondering kan triggeren Catch ex As Exception ‘Behandel uitzondering, gebruik makend van e End Try Of Dim ex As Exception Try ‘ code die een uitzondering kan triggeren Catch ex ‘Behandel uitzondering, gebruik makend van e End Try
9
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 9 8.3 Afhandelen van fouten Meer info over fout opvragen adhv System.Exception properties –Message : foutmelding gekoppeld aan uitzondering »Default boodschap : geassocieerd met exception type »Gecustomiseerde boodschap : doorgegeven aan constructor van object –Source : naam van applicatie of object die fout veroorzaakt heeft –TargetSite : naam methode die fout gegenereerd heeft –StackTrace : exception historiek.1 string die een sekwentiële lijst van methodes bevat, die op moment dat de exception zich voordoet, nog niet volledig zijn uitgevoerd –InnerException : voor geneste exceptions –HelpLink : link naar Help file geassocieerd met fout –ToString : retourneert een string met de naam van de exception, de exception message, de naam van de inner exception en de stack.
10
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 10 8.3 Afhandelen van fouten Voorbeeld Try s=File.open(txtFileName.text, FileMode.Open) lngSize = s.Length s.Close() Catch e As exception Messagebox.Show(“Fout bij openen bestand : “ & e.message) Messagebox.Show(“Fout bij openen bestand : “ & e.tostring()) End Try
11
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 11 8.3 Afhandelen van fouten Afhandelen van specifieke fouten(meerdere exceptionhandlers) .NET bevat tal van voorgedefinieerde exception klassen die afgeleid zijn van de basis klasse Exception in de System Namespace In foutafhandeling kan je meerdere catch blokken voorzien, die elk een specifieke fout afhandelen Volgorde van catch blokken is belangrijk! Runtime gaat op zoek naar eerste catch blok met een type fout waarvoor de “is een “ regel geldt.
12
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 12 8.3 Afhandelen van fouten Welke exceptions afhandelen? Zoek op in help : Elke methode die exceptions throwt heeft een sectie exceptions die de mogelijke exceptions beschrijft Voorbeeld : Exceptionklassen igv openen file –SecurityException : gebruiker heeft niet de vereiste permissies –ArgumentException : path is leeg, bevat enkel blanco’s of bevat illegale characters –FileNotFoundException : bestand bestaat niet –ArgumentNullException : path of mode is een NULL verwijzing –UnauthorizedAccessException : file is read-only of file is een pad –DirectoryNotFoundException : directory niet gevonden
13
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 13 8.3 Afhandelen van fouten Code Private Sub btnSpecifiekeFouten_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSpecifiekeFouten.Click Dim lngSize As Long; Dim s As FileStream Try s = File.Open(txtFileName.Text, FileMode.Open) lngSize = s.Length s.Close() Catch ArgumentExceptionParameter As ArgumentException MessageBox.Show("You specified an invalid filename. “) Catch FileNotFoundExceptionParameter As FileNotFoundException MessageBox.Show("The file you specified can't be found. Please try again.") Catch ArgumentNullExceptionParameter As ArgumentNullException MessageBox.Show("You passed in a Null argument.") Catch UnauthorizedAccessExceptionParameter As UnauthorizedAccessException MessageBox.Show( "You specified a folder name, not a file name.") Catch DirectoryNotFoundExceptionParameter As DirectoryNotFoundException MessageBox.Show("You specified a folder that doesn't exist or can't be found.") Catch SecurityExceptionParameter As SecurityException MessageBox.Show("You don't have sufficient rights to open the selected file.") Catch IOExceptionParameter As IOException MessageBox.Show("The drive you selected is not ready.”) Catch ExceptionParameter As Exception MessageBox.Show("An unknown error occurred.") End Try End Sub
14
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 14 8.3 Afhandelen van fouten.NET Exception hierarchy System.Exception Basis class van.NET Framework exception hierarchy Daaronder SystemException –Basisklasse voor alle exceptions gegenereerd door runtime ApplicationException –Creatie van exception data types eigen aan applicatie –Kunnen geworpen worden door applicatie In de help kan je de verdere exception hierarchy bekijken
15
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 15 8.3 Afhandelen van fouten Raisen van fout Fout laten afhandelen door aanroepende methode(s) Eigen fout definiëren Dmv. Throw : laten optreden van een uitzondering in procedure die dan wordt opgevangen door dichtsbijzijnde uitzonderinghandler in aanroepketen Throw de fout die zich zojuist heeft voorgedaan Catch e As Exception Throw() Throw een fout ergens in de code binnen een Try blok Throw New FileNotFoundException() Een fout throwen een specifieke boodschap meegeven Throw New FileNotFoundException(“Kan bestand & txtFileName.Text & _ “ niet openen”) Throw New Exception(“File not found”)
16
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 16 8.3 Afhandelen van fouten Hoe gaat runtime op zoek naar handlers indien je werkt met geneste Try blokken ? Bij fout wordt de uitvoering van code onmiddellijk afgebroken De runtime gaat op zoek naar fouthandler in bijhorend catch blokken. Als bijhorende handler gevonden wordt, wordt fout afgehandeld en wordt verdergegaan met uitvoering van programma Als er geen geschikte handler is voor fout in de bijhorende catch blokken, dan wordt de verwerking van de omvattende methodes (try blokken) afgebroken tot een corresponderende handler gevonden Als er geen omvattende try blokken zijn met een passende handler, dan handelt de runtime zelf de fout af met een runtime error
17
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 17 1 ' Properties.vb 2 ' Stack unwinding and Exception class properties. 3 4 ' demonstrates using properties Message, StackTrace and 5 ' InnerException 6 Class CProperties 7 8 Shared Sub Main() 9 10 ' call Method1; any Exception generatesd will be caught 11 ' in the Catch block that follows 12 Try 13 Method1() 14 15 ' Output String representation of Exception, then output 16 ' values of properties InnerException, Message and StackTrace 17 Catch exception As Exception 18 Console.WriteLine("exception.ToString: " & _ 19 vbCrLf & "{0}" & vbCrLf, exception.ToString()) 20 21 Console.WriteLine("exception.Message: " & _ 22 vbCrLf & "{0}" & vbCrLf, exception.Message) 23 24 Console.WriteLine("exception.StackTrace: " & _ 25 vbCrLf & "{0}" & vbCrLf, exception.StackTrace) 26 27 Console.WriteLine("exception.InnerException: " & _ 28 vbCrLf & "{0}" & vbCrLf, exception.InnerException) 29 30 End Try 31 32 End Sub ' Main 33 Aanroepen van Main, wordt eerste methode op method call stack Exception wordt opgevangen door catch handler Main roept Method 1 aan, die de 2de methode wordt op method-call stack
18
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 18 34 ' calls Method2 35 Public Shared Sub Method1() 36 Method2() 37 End Sub 38 39 ' calls Method3 40 Public Shared Sub Method2() 41 Method3() 42 End Sub 43 44 ' throws an Exception containing InnerException 45 Public Shared Sub Method3() 46 47 ' attempt to convert String to Integer 48 Try 49 Convert.ToInt32("Not an integer") 50 51 ' wrap FormatException in new Exception 52 Catch formatException As FormatException 53 54 Throw New Exception("Exception occurred in Method3", _ 55 formatException) 56 57 End Try 58 59 End Sub ' Method3 60 61 End Class ' CProperties exception.ToString: System.Exception: Exception occurred in Method3 ---> System.FormatException: Input String was not in a correct format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) Method 1 roept Method 2 op, die de derde methode op de stack wordt Method 2 roept Method 3 op, die de vierde methode op de stack wordt De gespecifieerde exception type komt overeen met het geworpen type, dus de fout wordt afgehandeld De FormatException wordt doorgegeven aan constructor als een InnerException Method 3 stopt en unwinding begint Daar argument geen Integer is, wordt een exception geworpen en Convert.ToInt32 wordt van de stack verwijderd Method 3 roept method Convert.ToInt32 op
19
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 19 at System.Int32.Parse(String s, NumberStyles style, IFormatProvider provider) at System.Int32.Parse(String s) at System.Convert.ToInt32(String value) at Properties.CProperties.Method3() in C:\books\2001\vbhtp2\ch11\Fig11_03\Properties\Properties.vb:line 49 --- End of inner exception stack trace --- at Properties.CProperties.Method3() in C:\books\2001\vbhtp2\ch11\Fig11_03\Properties\Properties.vb:line 54 at Properties.CProperties.Method2() in C:\books\2001\vbhtp2\ch11\Fig11_03\Properties\Properties.vb:line 41 at Properties.CProperties.Method1() in C:\books\2001\vbhtp2\ch11\Fig11_03\Properties\Properties.vb:line 36 at Properties.CProperties.Main() in C:\books\2001\vbhtp2\ch11\Fig11_03\Properties\Properties.vb:line 13 exception.Message: Exception occurred in Method3 exception.StackTrace: at Properties.CProperties.Method3() in C:\books\2001\vbhtp2\ch11\Fig11_03\Properties\Properties.vb:line 54 at Properties.CProperties.Method2() in C:\books\2001\vbhtp2\ch11\Fig11_03\Properties\Properties.vb:line 41 at Properties.CProperties.Method1() in C:\books\2001\vbhtp2\ch11\Fig11_03\Properties\Properties.vb:line 36 at Properties.CProperties.Main() in C:\books\2001\vbhtp2\ch11\Fig11_03\Properties\Properties.vb:line 13 exception.InnerException: System.FormatException: Input String was not in a correct format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.Int32.Parse(String s, NumberStyles style, IFormatProvider provider) at System.Int32.Parse(String s) at System.Convert.ToInt32(String value) at Properties.CProperties.Method3() in C:\books\2001\vbhtp2\ch11\Fig11_03\Properties\Properties.vb:line 49
20
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 20 8.4 Finally block Bevat code die altijd wordt uitgevoerd Ongeacht het feit of er zich nu een uitzondering voordoet of niet Wordt uitgevoerd na de exception handling code en voordat de controle wordt teruggegeven aan aanroepende methode Optionieel Niet vereist indien 1 of meerdere catch handlers bestaan Gebruik? Vrijgeven van resources gebruikt in Try Block Eliminatie van resource leaks
21
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 21 8.5 Programmer defined Exception Classes Erven van de klasse ApplicationException in namespace System Moeten voldoen aan volgende standaard Klasse naam moet eindigen op “Exception” Klasse moet 3 exceptions bevatten Default constructor Constructor met 1 input parameter van het type String argument –De foutmelding Constructor met een String argument en een Exception argument –De foutmelding –Het InnerException object
22
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 22 8.5 Programmer defined Exception Classes Voorbeeld van user defined klasse Public Class FileTooLargeException Inherits ApplicationException Private mlngFileSize As Long Public Sub New(ByVal Message As String) MyBase.New(Message) End Sub Public Sub New(ByVal Message As String, ByVal Inner As Exception) MyBase.New(Message, Inner) End Sub Public Sub New(ByVal Message As String, ByVal Inner As Exception, ByVal FileSize As Long) MyBase.New(Message, Inner) mlngFileSize = FileSize End Sub Public ReadOnly Property FileSize() As Long Get Return mlngFileSize End Get End Property End Class
23
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 23 8.5 Programmer defined Exception Classes Voorbeeld throwen van user defined exception Public Class FileTooLargeException Inherits ApplicationException Private mlngFileSize As Long Public Sub New(ByVal Message As String) MyBase.New(Message) End Sub Public Sub New(ByVal Message As String, ByVal Inner As Exception) MyBase.New(Message, Inner) End Sub Public Sub New(ByVal Message As String, ByVal Inner As Exception, ByVal FileSize As Long) MyBase.New(Message, Inner) mlngFileSize = FileSize End Sub Public ReadOnly Property FileSize() As Long Get Return mlngFileSize End Get End Property End Class
24
Hoofdstuk 8 : Fout afhandelingVisual Basic.NETPag. 24 8.5 Programmer defined Exception Classes Afhandelen user defined exception Private Sub btnUserDefined_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUserDefined.Click Dim lngSize As Long ' Test a user-defined exception. Try lngSize = GetSize(txtFileName.Text) Catch FileTooLargeExceptionParameter As FileTooLargeException MessageBox.Show( _ String.Format( _ "Please select a smaller file! " & _ "The file you selected was {0} bytes.", _ FileTooLargeExceptionParameter.FileSize)) Catch exceptionParameter As Exception MessageBox.Show(exceptionParameter.Message) End Try End Sub
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.