Hibakezelés
A hibák megfelelő kezelése az egyik legidőigényesebb feladat a programozásban. Az Apache OpenOffice Basic számos eszközt biztosít a hibakezelés leegyszerűsítésére.
Az On Error utasítás
Az On Error utasítás a hibakezelés alapja:
Sub Teszt
On Error Goto Hibakezelo
' ... feladat végrehajtása, amely közben hiba történhet
Exit Sub
Hibakezelo:
' ... hibakezelő kód
End Sub
Az On Error Goto Hibakezelo sor megadja, hogyan működjön az Apache OpenOffice Basic, ha hiba történik. A Goto Hibakezelo utasítás biztosítja, hogy az Apache OpenOffice Basic befejezi az aktuális programsort, és végrehajtja a Hibakezelo: kódot.
A Resume parancs
A Resume Next parancs folytatja a program futását a hibát okozó sor utáni sorban, miután a hibakezelő kód befejeződött:
ErrorHandler:
' ... hibakezelő kód
Resume Next
A Resume Folytatas paranccsal megadhatjuk, honnan folytatódjon a program a hibakezelés után:
ErrorHandler:
' ... hibakezelő kód
Resume Folytatas
Folytatas:
' ... a program itt folytatódik a hiba után
Ha azt akarjuk, hogy a program folytatódjon hibaüzenet nélkül, ha hiba történik, akkor használjuk a következő formátumot:
Sub Teszt
On Error Resume Next
' ... feladat végrehajtása, amely közben hiba történhet
End Sub
Az On Error Resume Next parancsot körültekintően használjuk, mert a hatása globális.
Hibainformációk lekérdezése
Hibakezelésnél hasznos lehet, ha rendelkezünk a hiba leírásával, és tudjuk, miért és hol történt a hiba:
- Az Err változó tartalmazza a történt hibák számát.
- Az Error$ változó tartalmazza a hiba leírását.
- Az Erl változó tartalmazza a sor számát, ahol a hiba történt.
A
MsgBox "Hiba " & Err & ": " & Error$ & " (sor : " & Erl & ")"
utasítás megjeleníti egy üzenetablakban a hibainformációkat.
Míg a VBA összefoglalja a hibaüzeneteket egy Err nevű statisztikai objektumban, az Apache OpenOffice Basic az Err, Error$ és Erl változót biztosítja. |
Az információk addig maradnak érvényesek, amíg a program egy Resume vagy On Error parancshoz nem ér, ahol az információk elvesznek.
A VBA-ban az Err objektum Err.Clear metódusával lehet visszaállítani a hibainformációkat, ha hiba történik. Az Apache OpenOffice Basicben ezt az On Error vagy a Resume parancs végzi el. |
Tippek a strukturált hibakezeléshez
A definíciós parancs (On Error) és a visszatérési parancs (Resume) is a Goto egyik változata.
Ha világosan felépített programot akarunk létrehozni, hogy elkerüljük a hibaüzenetek megjelenését, amikor ezt a struktúrát használjuk, ne használjunk ugróutasításokat anélkül, hogy nem figyelnénk meg azokat.
Az On Error Resume Next parancsot körültekintően kell használni, mert hatására a program nem jeleníti meg a hibaüzeneteket.
A legjobb, ha csak egyféle hibakezelést használunk egy programon belül – a hibakezelés legyen elkülönítve a tényleges programtól, és ne ugorjunk vissza az eredeti kódba, ha hiba történik.
Az alábbiakban példát láthatunk egy hibakezelési eljárásra:
Sub Pelda
' Hibakezelő megadása az eljárás elején
On Error Goto Hibakezelo
' ... Ez a tényleges programkód
On Error Goto 0 ' Hibakezelés kikapcsolása
' Vége a programnak
Exit Sub
' Hibakezelés kezdőpontja
Hibakezelo:
' Ellenőrizzük, hogy egy várt hiba történt-e
If Err = VartHibaSzama Then
' ... Hiba feldolgozása
Else
' ... Figyelmeztetés nem várt hibára
End If
On Error Goto 0 ' Hibakezelés kikapcsolása
End Sub
Ez az eljárás a hibakezelő megadásával kezdődik, amelyet a tényleges programkód követ. A programkód végén a hibakezelést kikapcsolja az On Error Goto 0 utasítás, és az eljárás befejeződik az Exit Sub paranccsal (ne tévesszük össze az End Sub paranccsal).
A program először ellenőrzi, hogy a hibaszám egy várt hibának felel-e meg (amelyet a VartHibaSzama állandónk tartalmaz), majd ennek megfelelően kezeli a hibát. Ha még egy hiba történik, a rendszer figyelmeztetést jelenít meg. Fontos, hogy ellenőrizzük a hibaszámot, hogy a nem várt hibákra fény derüljön.
Az On Error Goto 0 utasítás a kód végén alaphelyzetbe állítja a hibainformációkat (a hibakódot az Err rendszerváltozóban), így egy később előforduló hiba felismerhető lesz.
Content on this page is licensed under the Public Documentation License (PDL). |