Newsgroup: it.comp.lang.visual-basic
Titolo: [?] On Error Goto 0 : Ma funziona?

Ciao a tutti,
    perchè se faccio
    Dim x As Long
    Dim i as double
    For x = 1 To 10
        On Error Goto ErrHandler:
        i = 10 / (x mod 2) ' Se x è pari va in division by 0
    ErrHandler:
        Select Case Err.Number
        Case 11 'Division By Zero: ignora l'errore
        Case Else
            Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile,
Err.HelpContext
        End Select
        On Error GoTo 0
    Next x
Mi aspetterei che al secondo division by 0 ripassando per l'On Error, gli
errori vengano nuovamente filtrati, ma così non è e il programma si blocca.
Come cavolo dovrei comportarmi?
E questo non è da considerarsi un bug?
Grazie a tutti.

non vorrei sembrare scontato...
ma mi pare ci manchi una istruzione 'resume'
--[GbC]--

 errori vengano nuovamente filtrati, ma così non è e il programma si
blocca.
A parte che manca il Case 0, altrimenti passa per il Raise anche se non ci
sono errori, secondo me il problema è che non azzeri mai la gestione errori
col resume.
Se fai così funziona tutto:
    Dim x As Long
    Dim i As Double
    For x = 1 To 10
        On Error GoTo ErrHandler
        i = 10 / (x Mod 2) ' Se x è pari va in division by 0
        On Error GoTo 0
    Next x
    Exit Sub
ErrHandler:
        Select Case Err.Number
        Case 11 'Division By Zero: ignora l'errore
           Resume Next
        Case Else
          Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile,
Err.HelpContext
           Exit Sub
        End Select
Però, così per ridere, prova ad aggiungere Debug.Print i dopo l'istruzione
"i = ..." e prima dell'"On Error goto 0", e vedi cosa ti dice quando fai la
divisione per 0. 8-)




 ha scritto nel messaggio
news:89dlod$cau$1...@nslave2.tin.it...


divisione per 0. 8-)
Fantastico... e cosa mi vorrebbe dire quel 1, #INF? Non č neanche
documentato... Quello che mi preoccupa č che sembra che la i venga
assegnata...
Ciao

che vuoi fare?)
No, il Select era proprio sbagliato, ho dimenticato di mettere lo 0
nell'esempio postato, per la label hai ragione, volevo saltare alcune righe
di codice dopo la riga che andava in errore ma dato che c'è lo 0 (perchè ora
c'è) nella select, questo non serve più.
Il fatto è che proprio ignoravo che fosse la Resume a sistemare l'handling
degli errori e non la On Error Goto 0.
Ciao

 documentato...
Non lo chiedere a me. Io l'ho visto per caso e mi sono affrettato a
segnalarlo perchè è assolutamente incredibile...
Forse ti conviene nel case con error = division by zero, forzare il valore
di I a 0.
Ciao
*Roby*
P.S.
Forse #INF sta per infinito? In effetti qualunque numero diviso 0 dà
infinito...

In effetti qualunque numero diviso 0 dà infinito...
Mmmmh.... più o meno... direi che sono "completamente d'accordo a metà con
te".
Ciao

 infinito...
Eh? E da quando?
Naaahhhh... al massimo, possiamo più o meno affermare che il limite della
funzione 1/x, per x che tende a zero, è infinito... ma ciò non toglie che la
divisione per zero non ha senso, nemmeno se pisci contro vento.
--
Lunga vita e prosperità
Joshua
mailto://
jos...@mclink.it

 divisione per zero non ha senso, nemmeno se pisci contro vento.
Adesso che l'hai spiegato a me, vallo a spiegare anche alla Microsoft.
Ciao
*Roby*