ON ERROR (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
ON ERROR (TSB)
Syntax: ON ERROR: <befehl>
Parameter
befehl: GOTO 10000 (Beispiel)
Einordnung
Typ: Anweisung
Kontext: Fehlerkontrolle
Aufgabe: Fehler während des Programmlaufs abfangen
Abkürzung: on E
Token: $64 $43 (100 67)
Verwandte Befehle
OUT - RESUME - NO ERROR - ERRN - ERRLN


Dieser Artikel beschreibt das TSB-Schlüsselwort ON ERROR (TSB).
Das entsprechende Simons'-Basic-Schlüsselwort lautet ebenfalls ON ERROR.

Typ: Anweisung
Syntax: ON ERROR: <befehl>

Mit ON ERROR wird die Kontrolle, ob Fehler zu einer Fehlermeldung und einem damit verbundenen Programmabbruch führen, vom Interpreter ans Programm selbst übergeben. Da Fehler jederzeit im Programm auftauchen können, sollte ON ERROR gleich am Anfang des Programms stehen, am besten in der ersten Zeile. In der gleichen Zeile folgt auf den ON-ERROR-Befehl ein Befehl, der festlegt, was bei einem Programmfehler geschehen soll. Da auf einer einzigen Zeile nicht Platz genug für viel Information ist, setzt man hier üblicherweise einen Sprung an eine andere Stelle im Programm ein, z.B. ON ERROR: GOTO 10000 oder auch ON ERROR: CALL fehler.

Dort kann man dem User mitteilen, welcher Fehler vorlag (ERRN und OUT) und in welcher BASIC-Zeile er aufgetreten ist (ERRLN), damit die Ursache des Fehlers umrissen wird. Man sollte dem Benutzer Zeit zum Lesen geben und ihn dann entscheiden lassen, ob das Programm fortgesetzt (siehe RESUME) oder abgebrochen werden soll, um den Fehler zu beheben.

Hinweis: Bei Abbruch über END, STOP oder RUN/STOP  verlässt TSB den Fehlerabfang-Modus automatisch.

Beispiel[Bearbeiten | Quelltext bearbeiten]

10 ON ERROR: GOTO 10000
 
15 PRIN "?CLR/HOME?": PRINT "OK"
20 FOR I=1 TO 6:READ B:PRINT B:NEXT
30 DATA 1,2,3,4,5
40 END
 
10000 PRINT: PRINT "FEHLER NR." ERRN "(";: OUT: PRINT ")"
10010 PRINT "BETROFFENE ZEILE:" ERRLN: PRINT
10020 PRINT "BEENDEN (B)? FORTSETZEN (F)? ";: FETCH "FB",1,X$: PRINT
10030 IF X$ = "B" THEN PRINT: PRINT "ABBRUCH NACH FEHLER!": STOP
10040 RESUME

(bei einem Programmlauffehler springt der Interpreter in die BASCIC-Zeile 10000, 
gibt dort Informationen zum Fehler aus und stellt Handlungsalternativen zur Auswahl)
Ergebnis des Programmbeispiels


Benutzt man RESUME, sollten die Zeilen (10000-10040) der Fehlerabfang-Routine gründlich geprüft sein, denn ein Fehler hier wäre fatal.