Feil og avvik
< {{#switch:Previous Page | Previous Section = Previous Section | Next Section = Next Section | Previous Page = Previous Page | Next Page = Next Page | }} | {{#switch:Next Page | Previous Section = Previous Section | Next Section = Next Section | Previous Page = Previous Page | Next Page = Next Page | }} > |
Uttallige former for feil kan inntreffe. Mye tid går med til
å oppdage og håndtere feil. Program bør automatisk oppdage feil og
varsle eller loggføre disse, i stedet for å krasje.
Med On Error angir man hvor interpreteren skal gå ved feil, som i
Sub Test
On Error Goto feilTakler
...
Exit Sub
feilTakler:
...
Resume Next
End Sub
Med Resume Next ber en interpreter gå til den linje umiddelbart etter den linjen der feilen inntraff. Alternativt, kan en bruke Resume <annetSted> for å angi et annet sted i programmet, som i
feilTakler:
...
Resume etterFeilTakling
etterFeilTakling:
...
Navnene "feilTakler" og "etterFeilTakling" er navngitte merkelapper som kan ha bokstaver og tall i seg.
En forenklet feilhandtering er å ikke ha noen spesiell feiltakler:
Sub Test
On Error Resume Next
...
End Sub
Vil en "vite" mer om den sist inntrufne feil tilbys variablene
- Err (feilkode som har inntruffet)
- Error$ (tekstlig beskrivelse)
- Erl (linjenummeret der feilen inntraff)
Med disse kan en f.eks. vise et vindu med disse:
MsgBox "FEIL!! " & Err & ": " & Error$ & " (linjenr: " & Erl & ")"
De blankes ved Resume.
Feilhandtering gjøres bare der koden anses som "risikabel", at man vet at muligheten er tilstede. Mange mener også at det er uheldig å "hoppe tilbake" (med Resume Next) etterpå. En greit strukturert feilhandtering er derfor:
Sub Example
On Error Goto vedFeil
... (risikabel kode)
On Error Goto 0 ' deaktiver
... (trygg kode)
Exit Sub ' hopp ut her (ingen feil!)
vedFeil:
If Err = forventetFeil Then
... rydd opp slik vi kan
Else
... advar om uforutsett
End If
On Error Goto 0 ' deaktiver
End Sub
Content on this page is licensed under the Public Documentation License (PDL). |