Gestion des erreurs

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
feuweu
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 18 sept. 2018 11:13
Status : Hors ligne

Gestion des erreurs

#1

Message par feuweu »

Bonjour à vous, je débute autoit depuis quelques jours, venant de python je me demande comment gérer ou au moins rendre silencieuse une erreur, j'ai trouvé la macro @error mais je vois pas du tout comment l'utiliser. Pour éviter qu'on me jette la pierre je précise que j'ai déja fait des recherches mais que les personnes concernées demandaient des solutions à des cas bien trop poussés pour moi.

Merci d'avoir pris le temps de lire. :D
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Gestion des erreurs

#2

Message par mikell »

En général @error est utilisé dans une condition If/Else/EndIf
Les fonctions intégrées AutoIt retournent une valeur pour @error : <> 0 si erreur, sinon 0
Pour faire retourner une valeur de @error par une fonction custom il faut utiliser SetError() dans cette fonction (c.f.le fichier d'aide)

Je sais, tout ça est plutôt vague. Pour une réponse plus précise merci de fournir un petit exemple concret :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
feuweu
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 18 sept. 2018 11:13
Status : Hors ligne

Re: Gestion des erreurs

#3

Message par feuweu »

Merci pour la réponse, j'ai pas d'exemple sous la main, la macro SetError sert à créer et modifier la valeur de retour d'une erreur si j'ai bien compris. Mais pour comprendre imaginons que j'essaye d'atteindre quelque chose qui n'existe pas et que je veux que le script continue même si une erreur est rencontrée, qu'il passe simplement à la suite:

Code : Tout sélectionner

$aArray = [$valeur0,$valeur1]
MsgBox(0, "", $aArray[2])
Bien sûr ce code n'a aucun intérêt, en espérant avoir été plus compréhensible dans mes incompréhensions
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Gestion des erreurs

#4

Message par orax »

Le script va s'arrêter sur ce type d'erreur. Il faut donc vérifier que la taille du tableau est suffisamment grande.
Global $aArray = [1, 2]
If UBound($aArray) > 2 Then MsgBox(0, "", $aArray[2])
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Gestion des erreurs

#5

Message par walkson »

Bonjour,
Il n'y a pas comme en VBA de On Error resume next, il faut gérer les erreurs au cas par cas.
L'utilisation de fonctions permet de couper le code et de faire une gestion des erreurs plus fine. Si une fonction retourne une erreur non fatale, le code peut se poursuivre.
Mais il y a une multitude de manières de faire selon les circonstances. Dans l'exemple suivant, on recherche des nombres dans un texte avec différentes approches de la gestion d'erreur
#include <Array.au3>

Local $Array = StringRegExp("text sans nombre ","[0-9]",3) ;recherche de nombres dans le texte => error
;Return array of global matches.
If @error Then
   MsgBox(0,"Error",@error)
Else
   _ArrayDisplay($Array)
EndIf

Local $Array = StringRegExp("text sans nombre ","[0-9]",3)
If Not IsArray($Array) Then
   Local $Array[0] ;renvoie un array vide
EndIf
_ArrayDisplay($Array)

Local $Array = StringRegExp("text avec nombre 1 2 33 ","[0-9]",3) ;recherche de nombres dans le texte => succes
MsgBox(0, "retour", mafonction($Array))


Func mafonction($Array)
If Not IsArray($Array) Then
   Return SetError(1,1,"pas array")
Else
   _ArrayDisplay($Array)
EndIf
   Return SetError(0,0,"est array")
EndFunc
Remarque: si la fonction avait retournée une erreur cela n'aurait pas empêché le MsgBox d'apparaitre et de continuer le code
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Gestion des erreurs  

#6

Message par mikell »

Pour développer, une erreur de syntaxe étant fatale le script plante tout bêtement. La gestion d'erreur dans le déroulement du script (par exemple "atteindre quelque chose qui n'existe pas") avec @error (ou pas) doit être programmée, c'est plutôt un truc comme ça

$result = _test(1)
MsgBox(0, "test1", $result & @crlf & @error)
$result = _test(2)
MsgBox(0, "test2", $result & @crlf & @error)

Func _test($n)
   Local $aArray[] = ["var0","var1"]
   If $n >= UBound($aArray) Then Return SetError(1, 0, "erreur")
   Return $aArray[$n]
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
feuweu
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 18 sept. 2018 11:13
Status : Hors ligne

Re: Gestion des erreurs

#7

Message par feuweu »

Merci pour toutes ces méthodes, je vais tester tout ça
Répondre