9
votes

Comment continuer à exécuter le code après une exception est lancée?

J'aimerais savoir s'il existe un moyen de laisser le programme continuer après une exception. Par exemple: xxx


0 commentaires

9 Réponses :


0
votes

vb.net ne prend pas en charge ce type de construction. Une fois que l'exception se déroule la pile, elle ne peut pas redescendre. Certaines langues vous permettent de reprendre l'exception, mais elles nécessitent une gestion de pile plus sophistiquée - essentiellement des coroutines.


0 commentaires

1
votes
try 
  line 1
catch ex as exception
   log(ex.tostring)
end try
try
  line 2
catch ex as exception
   log(ex.tostring)
end try
try
  line 3
catch ex as exception
   log(ex.tostring)
end try
try
  line 4 ' (here the exception is throw and jumps to the catch)
catch ex as exception
   log(ex.tostring)
end try
try
  line 5 ' <-- I would like the program to continue its execution after logging the error
catch ex as exception
   log(ex.tostring)
end try
try
  line 6  
catch ex as exception
end try

1 commentaires

aww ... tu m'as battu ça :) Et si tu n'avais pas envie de créer tous les blocs de tressation d'essai, il y a toujours la déclaration du goto redoutable. Mais je ne le suggérais pas!



4
votes

Bien que sur erreur CV Suivant est toujours disponible Dans vb.net , il est mutuellement exclusif à la méthode préférée de manipulation des exceptions structurées.

Au lieu de cela, je recommanderais l'utilisation de la clause enfin d'un ESSAY..Catch..finalement bloc pour vous assurer que La ligne 5 et la ligne 6 est exécutée même si la ligne 4 (ou toute ligne précédente) jette. xxx


1 commentaires

Dans ce cas, l'exception est couse par une dbnullconversion à INT après la lecture d'un dB ... Mais c'était une seule donnée de nombreux autres, et c'est pourquoi je voulais continuer à lire .. merci !! Pour les commentaires!



12
votes

Si vous faites quelque chose que vous savez comment récupérer de ou ce n'est pas vital, vous êtes censé envelopper cette ligne dans l'essai / capture avec une capture spécifique. E.G.

Try 
  line 1
  line 2
  line 3
  Try
     line 4 ' (here the exception is throw and jumps to the catch)
  Catch iox as IOException ' or whatever type is being thrown
     'log it
  End Try
  line 5  ' <-- I would like the program to continue its execution after logging the error
  line 6  

Catch ex as Exception
   log(ex.tostring)
End Try


0 commentaires

0
votes

Si je ne me trompe pas les "meilleures pratiques pour la manutention d'exceptions" indique si vous pouvez vérifier une erreur qui se produira probablement, vérifiez alors cette condition. Si vous pouvez vérifier pour DBNULL, faites-le.


0 commentaires

5
votes

Utilisez 'Continuer pour'

Pas de bonne pratique partout, mais utile dans certaines circonstances, par exemple. Recherchez un fichier lors de la manipulation refusée Accès à certains répertoires: P>

    Dim dir As New DirectoryInfo("C:\")
    Dim strSearch As String = ("boot.ini")

    For Each SubDir As DirectoryInfo In dir.GetDirectories
        Try
            For Each File As FileInfo In SubDir.GetFiles
                Console.WriteLine("Sub Directory: {0}", SubDir.Name)
                If File.Name = strSearch Then
                    Console.Write(File.FullName)
                End If
            Next
        Catch ex As Exception
            Console.WriteLine(ex.Message)
            Continue For
        End Try
    Next


1 commentaires

Je crois que cela est redondant. The_tryculatch est à l'intérieur la boucle pour la boucle, la fois après la prise d'exception, vous allez toucher fin, vous allez ensuite frapper la prochaine étape. La seule fois que cela est utile, c'est si vous ne voulez pas continuer la FORLOOP, alors vous utiliseriez la sortie pour sortir de la boucle.



0
votes

Voici un exemple de code:

Sub yourSub()
  Dim cDelegate As CatchDelegate = Sub(ex As Exception)
                                       Your Catch Code
                                   End Sub
 line 1
 line 2
 line 3
 TCResumeNext(Sub() line 4, cDelegate)
 line 5
 line 6
End Sub

Delegate Sub CatchDelegate(e As Exception)

Sub TCResumeNext(tryDelegate As [Delegate], catchDelgate As CatchDelegate)
   Try
     tryDelegate.DynamicInvoke()
   Catch ex As Exception
      catchDelgate.DynamicInvoke(ex)
   End Try
End Sub


0 commentaires

-2
votes

tout à fait un vieux post mais pour le bien des autres. Personnellement, j'utiliserais "sur l'erreur CV Suivant" dans ce cas, c'est un mal nécessaire


1 commentaires

Aucun développeur professionnel n'utiliserait jamais «sur la résolution des erreurs suivant» dans une situation. Une fois que vous avez utilisé cette erreur, toutes les erreurs sont simplement ignorées ..... approximativement traduite. Cela signifie "j'ai une erreur et je m'en fiche" ....



0
votes

in vb.net Vous pouvez utiliser Visual Basic 6.0 Code:

PRIVATE SUB PROCESO
ON ERROR GOTO VERERROR:
10: line1
20: line2 
30: line3
EXIT SUB
VERERROR:
MSGBOX("ERROR " & ERR.NUM & "." & ERR.DESCRIPTION)
RESUME NEXT 
'RESUME FOR RETRY
END SUB 


0 commentaires