Difference between revisions of "NL/Documentation/BASIC Guide/Error Handling"
m (→Tips voor gestructureerde foutafhandeling) |
|||
Line 8: | Line 8: | ||
{{DISPLAYTITLE:Foutafhandeling}} | {{DISPLAYTITLE:Foutafhandeling}} | ||
__NOTOC__ | __NOTOC__ | ||
− | Correcte afhandeling van foutsituaties is een van de meest tijdrovende taken van programmeren. {{ | + | Correcte afhandeling van foutsituaties is een van de meest tijdrovende taken van programmeren. {{AOo}} BASIC verschaft een aantal gereedschappen om de foutafhandeling te vereenvoudigen. |
== De instructie <tt>On Error</tt> == | == De instructie <tt>On Error</tt> == | ||
Line 14: | Line 14: | ||
De instructie <tt>On Error</tt> is de sleutel voor elke foutafhandeling: | De instructie <tt>On Error</tt> is de sleutel voor elke foutafhandeling: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Sub Test | Sub Test | ||
On Error Goto ErrorHandler | On Error Goto ErrorHandler | ||
Line 22: | Line 22: | ||
' ... individuele code voor foutafhandeling | ' ... individuele code voor foutafhandeling | ||
End Sub | End Sub | ||
− | </ | + | </syntaxhighlight> |
− | De regel <tt>On Error Goto ErrorHandler</tt> definieert hoe {{ | + | De regel <tt>On Error Goto ErrorHandler</tt> definieert hoe {{AOo}} BASIC doorgaat in het geval van een fout. De opdracht <tt>Goto ErrorHandler</tt> verzekert u er van dat {{AOo}} BASIC de huidige programmaregel verlaat en vervolgens de code <tt>ErrorHandler:</tt> uitvoert. |
== De opdracht <tt>Resume</tt> == | == De opdracht <tt>Resume</tt> == | ||
Line 30: | Line 30: | ||
De opdracht <tt>Resume Next</tt> vervolgt het programma vanaf de regel die volgt op die waarin de fout voorkwam in het programma nadat de code in de foutafhandeling is uitgevoerd: | De opdracht <tt>Resume Next</tt> vervolgt het programma vanaf de regel die volgt op die waarin de fout voorkwam in het programma nadat de code in de foutafhandeling is uitgevoerd: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
ErrorHandler: | ErrorHandler: | ||
' ... individuele code voor foutafhandeling | ' ... individuele code voor foutafhandeling | ||
Resume Next | Resume Next | ||
− | </ | + | </syntaxhighlight> |
Gebruik de opdracht <tt>Resume Proceed</tt> om een springpunt te specificeren om het programma door te laten gaan na de foutafhandeling: | Gebruik de opdracht <tt>Resume Proceed</tt> om een springpunt te specificeren om het programma door te laten gaan na de foutafhandeling: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
ErrorHandler: | ErrorHandler: | ||
' ... individuele code voor foutafhandeling | ' ... individuele code voor foutafhandeling | ||
Line 45: | Line 45: | ||
Proceed: | Proceed: | ||
' ... het programma gaat hier door na de fout | ' ... het programma gaat hier door na de fout | ||
− | </ | + | </syntaxhighlight> |
De term Proceed is een label. Het zou bijvoorbeeld A247 kunnen zijn. De syntaxis voor namen van labels is hetzelfde als voor namen van variabelen. | De term Proceed is een label. Het zou bijvoorbeeld A247 kunnen zijn. De syntaxis voor namen van labels is hetzelfde als voor namen van variabelen. | ||
Line 51: | Line 51: | ||
Gebruik de volgende indeling om met een programma door te gaan zonder een foutbericht als er een fout optreedt: | Gebruik de volgende indeling om met een programma door te gaan zonder een foutbericht als er een fout optreedt: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Sub Test | Sub Test | ||
On Error Resume Next | On Error Resume Next | ||
' ... voer een taak uit gedurende welke een fout zou kunnen optreden | ' ... voer een taak uit gedurende welke een fout zou kunnen optreden | ||
End Sub | End Sub | ||
− | </ | + | </syntaxhighlight> |
Gebruik de opdracht <tt>On Error Resume Next</tt> voorzichtig want het effect ervan is global. | Gebruik de opdracht <tt>On Error Resume Next</tt> voorzichtig want het effect ervan is global. | ||
Line 70: | Line 70: | ||
De aanroep | De aanroep | ||
− | < | + | <syntaxhighlight lang="oobas"> |
MsgBox "Fout " & Err & ": " & Error$ & " (regel : " & Erl & ")" | MsgBox "Fout " & Err & ": " & Error$ & " (regel : " & Erl & ")" | ||
− | </ | + | </syntaxhighlight> |
geeft weer hoe de informatie over de fout kan worden weergegeven in een berichtenvenster. | geeft weer hoe de informatie over de fout kan worden weergegeven in een berichtenvenster. | ||
− | {{Documentation/VBAnote|Waar VBA de foutberichten samenvat in een global object genaamd <tt>Err</tt>, verschaft {{ | + | {{Documentation/VBAnote|Waar VBA de foutberichten samenvat in een global object genaamd <tt>Err</tt>, verschaft {{AOo}} Basic de variabelen <tt>Err,</tt> <tt>Error$</tt> en <tt>Erl</tt>.}} |
De statusinformatie blijft geldig totdat het programma een opdracht <tt>Resume</tt> of <tt>On Error</tt> tegenkomt, waarop de informatie opnieuw wordt ingesteld. | De statusinformatie blijft geldig totdat het programma een opdracht <tt>Resume</tt> of <tt>On Error</tt> tegenkomt, waarop de informatie opnieuw wordt ingesteld. | ||
{{Documentation/VBAnote|In VBA stelt de methode <tt>Err.Clear</tt> van het object <tt>Err</tt> de status van een fout opnieuw in nadat er een fout optrad. | {{Documentation/VBAnote|In VBA stelt de methode <tt>Err.Clear</tt> van het object <tt>Err</tt> de status van een fout opnieuw in nadat er een fout optrad. | ||
− | In {{ | + | In {{AOo}} Basic wordt dit gedaan met de opdrachten <tt>On Error</tt> of <tt>Resume</tt>. }} |
== Tips voor gestructureerde foutafhandeling == | == Tips voor gestructureerde foutafhandeling == | ||
Line 95: | Line 95: | ||
Het volgende is een voorbeeld van een procedure voor foutafhandeling: | Het volgende is een voorbeeld van een procedure voor foutafhandeling: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Sub Voorbeeld | Sub Voorbeeld | ||
' Definieer foutafhandeling aan het begin van de functie | ' Definieer foutafhandeling aan het begin van de functie | ||
Line 114: | Line 114: | ||
On Error Goto 0 ' Deactiveert de foutafhandeling | On Error Goto 0 ' Deactiveert de foutafhandeling | ||
End Sub | End Sub | ||
− | </ | + | </syntaxhighlight> |
− | Deze procedure begint met de definitie van een foutafhandeling, gevolgd door de eigenlijke programmacode. Aan het einde van de programmacode wordt de foutafhandeling gedeactiveerd door de aanroep <tt>On Error Goto 0</tt> en de implementatie van | + | Deze procedure begint met de definitie van een foutafhandeling, gevolgd door de eigenlijke programmacode. Aan het einde van de programmacode wordt de foutafhandeling gedeactiveerd door de aanroep <tt>On Error Goto 0</tt> en de implementatie van de procedure wordt beëindigd door de opdracht <tt>Exit Sub</tt> (niet te verwarren met <tt>End Sub</tt>). |
− | Het voorbeeld controleert eerst of het foutnummer overeenkomt met het verwachte nummer (zoals opgeslagen in de denkbeeldige constante <tt>ExpectedErrorNo</tt>) en behandelt de fout | + | Het voorbeeld controleert eerst of het foutnummer overeenkomt met het verwachte nummer (zoals opgeslagen in de denkbeeldige constante <tt>ExpectedErrorNo</tt>) en behandelt de fout net zo. Als een andere fout optreedt, geeft het systeem een waarschuwing weer. Het is belangrijk om het foutnummer te controleren, zodat onverwachte fouten kunnen worden herkend. |
De aanroep <tt>On Error Goto 0</tt> aan het einde van de code herstelt de statusinformatie van de fout (de foutcode in de systeemvariabelen <tt>Err</tt>) zodat een fout die op een later tijdstip voorkomt toch duidelijk herkend kan worden. | De aanroep <tt>On Error Goto 0</tt> aan het einde van de code herstelt de statusinformatie van de fout (de foutcode in de systeemvariabelen <tt>Err</tt>) zodat een fout die op een later tijdstip voorkomt toch duidelijk herkend kan worden. |
Latest revision as of 15:14, 9 February 2021
Correcte afhandeling van foutsituaties is een van de meest tijdrovende taken van programmeren. Apache OpenOffice BASIC verschaft een aantal gereedschappen om de foutafhandeling te vereenvoudigen.
De instructie On Error
De instructie On Error is de sleutel voor elke foutafhandeling:
Sub Test On Error Goto ErrorHandler ' ... voer een taak uit gedurende welke een fout zou kunnen optreden Exit Sub ErrorHandler: ' ... individuele code voor foutafhandeling End Sub
De regel On Error Goto ErrorHandler definieert hoe Apache OpenOffice BASIC doorgaat in het geval van een fout. De opdracht Goto ErrorHandler verzekert u er van dat Apache OpenOffice BASIC de huidige programmaregel verlaat en vervolgens de code ErrorHandler: uitvoert.
De opdracht Resume
De opdracht Resume Next vervolgt het programma vanaf de regel die volgt op die waarin de fout voorkwam in het programma nadat de code in de foutafhandeling is uitgevoerd:
ErrorHandler: ' ... individuele code voor foutafhandeling Resume Next
Gebruik de opdracht Resume Proceed om een springpunt te specificeren om het programma door te laten gaan na de foutafhandeling:
ErrorHandler: ' ... individuele code voor foutafhandeling Resume Proceed Proceed: ' ... het programma gaat hier door na de fout
De term Proceed is een label. Het zou bijvoorbeeld A247 kunnen zijn. De syntaxis voor namen van labels is hetzelfde als voor namen van variabelen.
Gebruik de volgende indeling om met een programma door te gaan zonder een foutbericht als er een fout optreedt:
Sub Test On Error Resume Next ' ... voer een taak uit gedurende welke een fout zou kunnen optreden End Sub
Gebruik de opdracht On Error Resume Next voorzichtig want het effect ervan is global.
Query's met betrekking tot informatie over fouten
In foutafhandeling is het handig om een beschrijving van de fout te hebben en te weten waar en waarom die fout optrad:
- De variabele Err bevat een getal dat het type fout identificeert dat optrad.
- De variabele Error$ bevat een beschrijving van de fout.
- De variabele Erl bevat het regelnummer waar de fout optrad.
De aanroep
MsgBox "Fout " & Err & ": " & Error$ & " (regel : " & Erl & ")"
geeft weer hoe de informatie over de fout kan worden weergegeven in een berichtenvenster.
VBA : Waar VBA de foutberichten samenvat in een global object genaamd Err, verschaft Apache OpenOffice Basic de variabelen Err, Error$ en Erl. |
De statusinformatie blijft geldig totdat het programma een opdracht Resume of On Error tegenkomt, waarop de informatie opnieuw wordt ingesteld.
Tips voor gestructureerde foutafhandeling
Zowel de definitie-opdracht On Error, als de terugkeer-opdracht Resume zijn varianten van de construct Goto.
Als u uw code netjes wilt structureren om te voorkomen dat fouten worden gegenereerd bij het gebruik van deze construct, zou u geen opdrachten voor springen moeten gebruiken, zonder die in de gaten te houden.
Voorzichtigheid is geboden bij het gebruik van de opdracht On Error Resume Next, omdat dit alle openstaande foutmeldingen opheft.
De beste oplossing is om maar één benadering te gebruiken voor foutafhandeling binnen een programma – houdt foutafhandeling gescheiden van de actuele programmacode en spring niet terug naar de oorspronkelijke code nadat de fout optrad.
Het volgende is een voorbeeld van een procedure voor foutafhandeling:
Sub Voorbeeld ' Definieer foutafhandeling aan het begin van de functie On Error Goto ErrorHandler ' ... Hier staat de actuele code voor het programma On Error Goto 0 ' Deactiveert de foutafhandeling ' Einde van reguliere implementatie van het programma Exit Sub ' Beginpunt van de foutafhandeling ErrorHandler: ' Controleer welke fout werd verwacht If Err = ExpectedErrorNo Then ' ... Verwerk de fout Else ' ... Waarschuwing voor een onverwachte fout End If On Error Goto 0 ' Deactiveert de foutafhandeling End Sub
Deze procedure begint met de definitie van een foutafhandeling, gevolgd door de eigenlijke programmacode. Aan het einde van de programmacode wordt de foutafhandeling gedeactiveerd door de aanroep On Error Goto 0 en de implementatie van de procedure wordt beëindigd door de opdracht Exit Sub (niet te verwarren met End Sub).
Het voorbeeld controleert eerst of het foutnummer overeenkomt met het verwachte nummer (zoals opgeslagen in de denkbeeldige constante ExpectedErrorNo) en behandelt de fout net zo. Als een andere fout optreedt, geeft het systeem een waarschuwing weer. Het is belangrijk om het foutnummer te controleren, zodat onverwachte fouten kunnen worden herkend.
De aanroep On Error Goto 0 aan het einde van de code herstelt de statusinformatie van de fout (de foutcode in de systeemvariabelen Err) zodat een fout die op een later tijdstip voorkomt toch duidelijk herkend kan worden.
Content on this page is licensed under the Public Documentation License (PDL). |