[Core] Pb avec error? et try
trigram9-Feb-2011/12:43:33+1:00
Bonjour,

Je suis en train de galérer avec le FTP à cause de la mauvaise gestion du @ dans le mot de passe.
Du coup, il faut utiliser des voix détourner car on ne peut pas utiliser la commande ftp:// directement.
Voir post à ce sujet :
http://www.digicamsoft.com/cgi-bin/rebelBB.cgi?thread=%3C10Nov2010163953789875100%3E

Du coup, je me suis dit que j'allais pouvoir utiliser le script d'Olivier dans son dernier livre.

@olivier
Au passage, les liens vers les sources ne fonctionnent pas. J'ai trouver les sources sur ton site mais dans la section du livre en anglais.

J'ai une erreur qui m'arrive de temps (pas spécifiquement avec le script d'Olivier) et que je ne comprends pas :

** Script Error: err needs a value
** Where: exec-cmd
** Near: if error? err: try [
    do cmd
]


et le code qui contient le code en erreur :

exec-cmd: func [
        cmd [ block! ] "Rebol instructions"
        /local err
] [
        if error? err: try [
                do cmd
                if view? [
                        progression/data: progression/data + stp
                        show progression
                ]
        ] [ print mold disarm err ]
]


J'avais mis en commentaire la partie view, mais je l'ai remise et cela ne change rien.

Si je retire la gestion d'erreur, j'arrive à faire fonctionner le script.
J'ai juste dû rajouter /binary sur le get comme on fait un read/binary.

Nico
coccinelle9-Feb-2011/13:01:05+1:00
Le problème vient que ton try ne retroune rien (autrement dit unset!) dans bien des cas. Par exemple lorsque la dernière instruction exécutée dans le try est print, ou un if avec la condition fausse.

Soit tu utilises attempt, ce problème sera géré.

Soit tu modifies ta fonction en utilisant set/any et get/any mais c'est plus compliqué.
exec-cmd: func [
        cmd [ block! ] "Rebol instructions"
        /local err
] [
        set/any 'err try [
                do cmd
                if view? [
                        progression/data: progression/data + stp
                        show progression
                ]
        ]
        if error? get/any 'err [print mold disarm err ]
]
trigram9-Feb-2011/13:17:11+1:00
Ca fonctionne bien.
Et c'est plus clair comme cela je trouve.

Merci.
RebKodeur9-Feb-2011/17:59:31+1:00
Sinon au lieu de

if error? err: try [

tu écris if error? set/any 'err try [

][
probe disarm err
]

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2