Feil og avvik

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


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