J'aimerais savoir s'il existe un moyen de laisser le programme continuer après une exception. Par exemple:
9 Réponses :
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. P>
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
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!
Bien que Au lieu de cela, je recommanderais l'utilisation de la clause sur erreur CV Suivant code> est toujours disponible Dans vb.net , il est mutuellement exclusif à la méthode préférée de manipulation des exceptions structurées.
enfin code> d'un
ESSAY..Catch..finalement code>
bloc pour vous assurer que La ligne 5 et la ligne 6 code> est exécutée même si la ligne 4 (ou toute ligne précédente) jette. P>
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!
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
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. P>
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
Je crois que cela est redondant. The_tryculatch est à l'intérieur i> 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.
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
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 p>
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" ....
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