/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
error handling
Fra : Troels Thomsen


Dato : 09-05-03 14:40

Hej,

I en error-handler skal jeg gøre nogle ting der også kan forårsage fejl.
Derfor har jeg en ny "on error goto label" men der bliver aldrig hoppet
derned. Istedet bliver fejlen fanget et niveau længere ude

Er det rigtigt nok at man ikke kan have errorhandlers inden i hinanden?

Stinker det af dårligt design at lave err.raise i sine cleanup funktioner,
der i mit tilfælde bl.a. bliver kaldt under fejlhåndtering?

mvh Troels



 
 
Robert (10-05-2003)
Kommentar
Fra : Robert


Dato : 10-05-03 14:44

> I en error-handler skal jeg gøre nogle ting der også kan forårsage fejl.
> Derfor har jeg en ny "on error goto label" men der bliver aldrig hoppet
> derned. Istedet bliver fejlen fanget et niveau længere ude

Jeg tror ikke jeg er helt med.

Du kan jo lave noget lokalt errorhandling:

Hvis du har een error handler kaldet errHandler, kan du gøre noget ala.

'Lokal errorHandling

.....
....
function ...()
on error goto errHandler

Dim lTest as long
'her kan der forkomme en fejl

on error resume next ' Slå funktions error handling fra

'Test:
lTest = "Hej mor "
if err.number <> 0 then
' lav errorhandling
...
'Ryd op:
err.clear
end if
on error goto errHandler 'Slå almindelig error handling til igen

exit function

errHandler:
err.raise err.number

end function


> Er det rigtigt nok at man ikke kan have errorhandlers inden i hinanden?

Ja - det kan man ikke - helligt område
Der må ikke opstå fejl i error handleren

Men man kan kalde en funktion i error handleren. Som fx:

errHandler:
LogEvent ( err ) 'Tilføj fejl til senere håndtereing <- eller whatever



> Stinker det af dårligt design at lave err.raise i sine cleanup funktioner,
> der i mit tilfælde bl.a. bliver kaldt under fejlhåndtering?

I mangel af at VB6 ikke har exceptions - what's a guy to do ?
(måske jeg tager fejl her ??)

Robert



Johnny E Jensen (11-05-2003)
Kommentar
Fra : Johnny E Jensen


Dato : 11-05-03 08:50

Hej Robert!

On error resume next ' slå ikke error funktionen fra - tvært imod. Opstår
der en fejl, vil error-funktionen gå til næste program linie.
Benyt: On Error Goto 0 - så er error funktionen slået fra....

/Johnny

"Robert" <nospam@remove-this-runge.dk> wrote in message
news:b9ivmp$a80$1@news.net.uni-c.dk...
> > I en error-handler skal jeg gøre nogle ting der også kan forårsage fejl.
> > Derfor har jeg en ny "on error goto label" men der bliver aldrig hoppet
> > derned. Istedet bliver fejlen fanget et niveau længere ude
>
> Jeg tror ikke jeg er helt med.
>
> Du kan jo lave noget lokalt errorhandling:
>
> Hvis du har een error handler kaldet errHandler, kan du gøre noget ala.
>
> 'Lokal errorHandling
>
> ....
> ...
> function ...()
> on error goto errHandler
>
> Dim lTest as long
> 'her kan der forkomme en fejl
>
> on error resume next ' Slå funktions error handling fra




Tomas Christiansen (11-05-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 11-05-03 21:29

Troels Thomsen skrev:
> I en error-handler skal jeg gøre nogle ting der også kan forårsage fejl.
> Derfor har jeg en ny "on error goto label" men der bliver aldrig hoppet
> derned. Istedet bliver fejlen fanget et niveau længere ude
>
> Er det rigtigt nok at man ikke kan have errorhandlers inden i hinanden?

Ja, jeg har kreeret en lille kodestump, som gengiver dit problem (når Test1
køres), og et eksempel på hvordan man (måske, afhænger af situationen) kan
komme uden om problemer (når Test2 køres):

Option Explicit

Private Sub Form_Load()
On Error GoTo Err1
Debug.Print "Før Test"
Test2 'OBS: Kør Test1 eller Test2
Debug.Print "Efter Test"
Exit Sub
Err1:
Debug.Print "Err1 " & Err.Number & ": " & Err.Description
End Sub

Private Sub Test1()
On Error GoTo Err2
Dim x As Long
Debug.Print "Før x = x / x"
x = x / x
Debug.Print "Efter x = x / x"
Exit Sub
Err2:
Debug.Print "Err2 " & Err.Number & ": " & Err.Description
On Error GoTo Err3
Debug.Print "Før x = Val(""A"")"
x = CLng("A")
Debug.Print "Efter x = Val(""A"")"
Exit Sub
Err3:
Debug.Print "Err3 " & Err.Number & ": " & Err.Description
End Sub

Private Sub Test2()
On Error GoTo Err2
Dim x As Long
Debug.Print "Før x = x / x"
x = x / x
Debug.Print "Efter x = x / x"
Exit Sub
Err2:
ErrorHandler x
End Sub

Private Sub ErrorHandler(ByRef x As Long)
Debug.Print "Err2 " & Err.Number & ": " & Err.Description
On Error GoTo Err3
Debug.Print "Før x = Val(""A"")"
x = CLng("A")
Debug.Print "Efter x = Val(""A"")"
Exit Sub
Err3:
Debug.Print "Err3 " & Err.Number & ": " & Err.Description
End Sub

> Stinker det af dårligt design at lave err.raise i sine cleanup funktioner,
> der i mit tilfælde bl.a. bliver kaldt under fejlhåndtering?

Jeg bruger selv Err.Raise (dog altid via en procedure), i diverse
under-rutiner. De logger evt. selv "noget" i en fælles log, og kaster fejlen
videre til der fra hvor under-runitet blev kaldt, f.eks. kan den signalere
noget i retning af "Kopiering af filen fejlede" i stedet for én af alle de
999 muligheder for fejlkoder i forbindelse med kopiering af filer. Det er nu
kalderens opgave at vurdere om det er en fejl, som er til at "leve" med
(hvis man kan kalde et computer-program for "liv"?), og evt. logge
yderligere information, spørge brugeren eller prøve noget andet (dvs.
ignorere fejlen).

Man kan sagtens risikere at en fejl initieret ét sted, bliver kastet rundt i
kald-stakken adskillige gange, indtil den havner et sted, hvor den bliver
behandlet.

-------
Tomas


Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste