Fehler auslösen (Exception Behandlung)

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

TenBaseT
****
Beiträge: 128
Registriert: Mo, 08.03.2004 10:01

Fehler auslösen (Exception Behandlung)

Beitrag von TenBaseT »

Wow, ist ja schon lange her, dass ich mal richtig in Basic programmiert habe. Da gabs noch keine Systeme mit Maus und Grafik :oops: Arbeite in den letzten Jahren vorzugsweise mit Delphi, das erklärt wahrscheinlich die Frage.

Vor 25 Jahren lief Fehlerbehandlung in Basic mal so nebenbei. Hielt nur unnötig auf. War einfacher, das mal eben selbst zu korrigieren. In Delphi lernte ich dann Try..Except...Finally kennen. Schade das man das nicht übernommen hat.

Ich möchte in einer Funktion gleich zu anfang eine Plausiprüfung machen. Wenn die Bedingungen nicht erfüllt sind, dann möchte ich einen Fehler auslösen. In Delphi würde ich einfach Exception.Create('Hier hat wieder jemand Mist eingegeben.........') in den Code einbauen und schon läuft das Programm damit in die Fehlerbehandlung. Welche Möglichkeiten habe ich in SO Basic. Im Programmersguide kommt das m. E. etwas kurz weg.

Hans
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Hans,

Handarbeit.

Viele Funktionen in Basic liefern Rückgabewerte, auch Fehlercodes. Die kannst du über einfache Schleifen auswerten.

Ich weiss nicht, was du prüfen willst, dann könnte ich dir vielleicht weitergehend Hilfe geben.
Die bekanneste Abfrage ist eigentlich die, ob eine bestimmte Datei existiert oder nicht. Dafür gibt es die Funktion "FileExist()"

Ansonsten schau mal in die Hilfe von Basic. Unter dem Begriff "Runtimefunktionen" ->"Fehlerbehandlungsfunktionen" gibt es einiges, das dir weiterhelfen sollte.

Findest du in der Basic-Hilfe, Startseite....

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
TenBaseT
****
Beiträge: 128
Registriert: Mo, 08.03.2004 10:01

Beitrag von TenBaseT »

Hi Toxitom

das was in der Doku steht, kann man dann erst anwenden, wenn der Fehler bereits erkannt und die entspfrechenden Aktion ausgelöst wurde.

Ich möchte zu beginn einer Funktion die Übergabeparameter auf Plausibilität prüfen. Am Besten ich gebe einmal ein Beispiel:

Code: Alles auswählen

Function GetBincodeStr(aStock as Integer, aHall as Integer, aBin as Integer) as String
  dim sStock as String
  dim sHall  as String
  dim sBin   as String
  
  On Error Goto ErrorHandlig

  if aStock < 1 or aStock > 99 then 
    hier Fehler auslösen
  end if

  if aHall < 0 or aHall > 999 then 
    hier Fehler auslösen
  end if

  if aBin < 0 or aBin > 999999 then 
    hier Fehler auslösen
  end if
Wenn einer der übergebenen Parameter nicht plausibel ist, dann macht es keinen Sinn, überhaupt noch weiter zu arbeiten. Deshalbt ist es sinnvoll, einen Fehler auszulösen und darauf entsprechend zu reagieren. Wenn man so will, ist das der organisierte Programm- / Funktionsabbruch.

Ich könnte ja in überall wo hier Fehler auslösen steht ein a = 1 / 0 einbauen. Dann würde ein Fehler Division by Zero Error ausgelöst. Sauber würde ich eine solche "Hilfslösung" mit Sicherheit nicht finden.

Hans
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Hans,

also, eigentlich hast du die Lösung doch schon beschrieben:
Überall dort, wo du "hier Fehler auslösen" geschrieben hast, steht dein Fehleraufruf.
Du kannst zwar auch mit dem Befehl "GoTo" arbeiten, aber eigentlich soll der nicht mehr verwendet werden. Besser wie folgt:
Du erstellst eine eigene FehlerUnterroutine so in der Art:

Code: Alles auswählen

Sub FehlerRoutine1
   tu hier irgend etwas 
end sub
Wenn du eine Funktion nimmst, kannst du auch Daten übergeben.
Im normalen Code wird dann in den Schleifen die Sub aufgerufen und der normale Ablauf mit "exit" verlassen.

Code: Alles auswählen

sub irgendetwas
    ....
    if aStock < 1 or aStock > 99 then
    FehlerRoutine1
    exit sub
  end if
   .....
 end sub 
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten