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.
Gestion des erreurs
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: Gestion des erreurs
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
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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: Gestion des erreurs
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
Code : Tout sélectionner
$aArray = [$valeur0,$valeur1]
MsgBox(0, "", $aArray[2])
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: Gestion des erreurs
Le script va s'arrêter sur ce type d'erreur. Il faut donc vérifier que la taille du tableau est suffisamment grande.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: Gestion des erreurs
Bonjour,
Il n'y a pas comme en VBA de
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
Remarque: si la fonction avait retournée une erreur cela n'aurait pas empêché le MsgBox d'apparaitre et de continuer le code
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
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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: Gestion des erreurs
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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: Gestion des erreurs
Merci pour toutes ces méthodes, je vais tester tout ça