CadFrank Posté(e) le 17 février 2016 Posté(e) le 17 février 2016 Bonjour, y aurait-il quelqu'un qui pourrais me guider sur la gestion des erreurs. Comment gérer plus d'une erreur dans un même code et j'aimerais savoir quand est ce qu'il faut que je lance un erreur quand la personne peut appuyer n'importe quand sur ESC. Merci ! François
Tramber Posté(e) le 17 février 2016 Posté(e) le 17 février 2016 N'y allons pas par 4 chemins :(defun c:maroutine(/ *error*) ; ici *error* est local. (defun *error* (msg) (command) ; Annulation des commandes en cours (princ (strcat"\nerreur ici, msg= " msg)) (princ) ) (command "_pline") (while (setq p(getpoint)) (command p)) (command) ) Alors voilà. *error* aurait l'air comme cela d'une variable, c'est pourtant une fonction.Si tu lances !*error* dans la ligne de commande (mieux dans la console Vlisp car là au moins il n'y a pas de correcteur d'orthographe à désactiver), cela te renvoie :#Tu as la preuve qu'il s'agit d'une fonction déjà définie. Au sein d'une commande, comme je l'ai fait, on peut redéfinir cette fonction en toute tranquillité à l'intérieur puisque la variable est locale, enfermée. Tu connais au moins ce principe. *error* portera toujours, et en Français, le message d'erreur renvoyé dans la variable msg.Ici ca sera "fonction annulée". Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 17 février 2016 Posté(e) le 17 février 2016 Si tu as plusieurs fonctions dont tu voudrais qu'elles accèdent, elles aussi à la même fonction de gestion des erreurs, à ce moment là, tu peux l'externaliser ainsi :(defun c:maroutine(/ m:err) (setq m:err *error* *error* ma_fct_err); passe-passe qui permet de substituer ma_fct_err (command "_pline") (while (setq p(getpoint)) (command p)) (command) (setq *error* m:err ;; restaurer *error* originel m:err nil ) ) (defun ma_fct_err (msg) (command) ; Annulation des commandes en cours (princ (strcat"\nerreur ici, msg= " msg)) (princ) (setq *error* m:err m:err nil) ) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
CadFrank Posté(e) le 18 février 2016 Auteur Posté(e) le 18 février 2016 Bonjour Tramber, Merci pour ton aide. Donc, si je comprend bien tant que je substitu *error* dans mon code et que la touche ESC par exemple est appuyé l'erreur que j'ai remplacé sera envoyé. Et, admetton que dans ma commande le je vérifie l'accès à une fichier .txt et s'assurer que si l'utilisateur appuie sur la touche ESC. Je peux créer 2 situations sous-routine d'erreur pour les gérers? Merci.
(gile) Posté(e) le 18 février 2016 Posté(e) le 18 février 2016 Salut, Si tu veux gérer plus finement les erreurs, tu devrait regarder du côté des fonctions vl-catch-all-apply, vl-catch-all-error-p et vl-catch-all-error-message. PS: il semble que l'aide AutoLISP se soit bien améliorée (du moins l'aide en ligne). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant