Page 1 sur 1
Gestion des erreurs
Posté : mar. 18 sept. 2018 11:20
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.

Re: Gestion des erreurs
Posté : mar. 18 sept. 2018 14:06
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

Re: Gestion des erreurs
Posté : mar. 18 sept. 2018 15:11
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:
Bien sûr ce code n'a aucun intérêt, en espérant avoir été plus compréhensible dans mes incompréhensions
Re: Gestion des erreurs
Posté : mar. 18 sept. 2018 15:56
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.
Re: Gestion des erreurs
Posté : mar. 18 sept. 2018 21:19
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)EndIfLocal $Array = StringRegExp("text sans nombre ","[0-9]",3)If Not IsArray($Array) Then Local $Array[0] ;renvoie un array videEndIf_ArrayDisplay($Array)Local $Array = StringRegExp("text avec nombre 1 2 33 ","[0-9]",3) ;recherche de nombres dans le texte => succesMsgBox(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
Re: Gestion des erreurs
Posté : mar. 18 sept. 2018 21:35
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
Re: Gestion des erreurs
Posté : mer. 19 sept. 2018 11:01
par feuweu
Merci pour toutes ces méthodes, je vais tester tout ça