Domino 9 und frühere Versionen > ND6: Entwicklung
error handling
koehlerbv:
Ohne Exit Sub oder Resume Sprungmarke nimmst Du den entstandenen Fehler mit in die aufrufende Routine. Exit Sub setzt Err = 0.
Bernhard
littleS:
Danke. Also falls ich den Fehler nicht der aufrufenden Routine (nochmal) behandeln möchte, dann macht es Sinn, "myerrhandler" mit "Exit Sub" zu verlassen.
Dann werd ich mal die DesignerHilfe bemühen, um noch etwas tiefer in die Thematik einzutauchen.
s.
TMC:
--- Zitat von: Marinero Atlántico am 02.05.05 - 13:58:44 ---Für meinen Geschmack ist das 2. Exit Sub völlig in Ordnung.
--- Ende Zitat ---
Ist wohl schon Geschmackssache, aber ich sehe das nicht so.
--- Code: ---On Error goto ErrHandler
'code
Exit Sub
ErrHandler:
'print "irgendwas'
End Sub
--- Ende Code ---
Sobald im ErrorHandler, kommt dann bei 'End Sub' eine "No Resume"-Fehlermeldung.
Da jetzt einfach eine "Exit Sub" reinzuschalten, finde ich persönlich nicht als "schön". Denn erstmal ist so nicht ersichtlich, dass Exit Sub ein Err=0 macht. Siehe auch die Frage oben von littleS als Auslöser dieses Threads.
Meines Erachtens ist es durchgängiger, hier mit 2 Sprungmarken zu arbeiten:
--- Code: ---On Error goto ErrHandler
'code
GoOut:
Exit Sub
ErrHandler:
'print "irgendwas'
Resume GoOut
End Sub
--- Ende Code ---
Wenn man das immer so macht, hat das noch einen Vorteil. Statt ExitScript verwendet man immer GoOut, also auch z.B. bei anderen Prüfungen/If-Abfragen etc. Im GoOut kann man dann noch was anderes machen, was allgemein immer gemacht werden soll, wenn man die Routine verlässt.
Man sollte das IMHO aber dann durchgängig machen, und ansonsten Sprungmarken immer vermeiden.
Außerdem ist es so schön durchgängig: Eine Fehlerbehandlung wird immer sauber durch ein Resume beendet.
Aber wie schon erwähnt: ist wohl "Geschmackssache". Am wichtigsten ist IMHO, das immer gleich zu machen, zumindest für ein Projekt.
Glombi:
Ich verwende auch nie das Exit sub sondern immer ein Goto EndOfModule oder Goto GoOut wie Matthias.
Der Grund ist einfach: Wenn ich eine Sub in eine Function oder umgekehrt ändere, muss ich alle Exit Sub als Exit Function bzw. andersherum programmieren. Und das ist unnötige Arbeit!
Und da ich viel mit Copy Paste bzw. Vorlagen arbeite, ist es so immer nutzbar.
Andreas
koehlerbv:
Ich halte es hier mit Axel, dem Seemann. Hauptsache, man verwendet eine stringente Regel - meines Erachtens sollte diese nicht nur auf ein Projekt bezogen sein, wenn man sich mal entschieden hat.
Ein Goto LeaveModule ist genauso gut oder schlecht wie ein oder mehr Exit <module> (ob nun Sub oder Function) - es muss einfach in das Konzept passen und dann entsprechend durchgezogen werden.
Wichtiger sind meines Erachtens sowie folgende Punkte:
- Wie wird einheitlich den aufrufenden Modulen mitgeteilt, dass der Aufruf der Unterroutine in die Hose gegangen ist ?
- Wie sorge ich dafür, dass auch logische (also non-run time ) Fehler der aufrufenden Routine ihre Not signalisieren ?
- Sorge ich ordentlich vor, dass alle eindeutig vorher erkennbaren Fehlerzustände ohne ErrorHandler abfange ? Ich denke hier nur an auch hier im Forum immer wieder geposteten Code, der irgendein Objekt versucht zu instantiieren und sich dann darauf verlässt, dass das Objekt auch wirklich vorhanden ist (Set item = doc.GetFirstItem (.... usw. )
Bernhard
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln