Feil og avvik

From Apache OpenOffice Wiki
Jump to: navigation, search


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).
Personal tools