IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

eval d'un string


Sujet :

Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut eval d'un string
    bonjour

    je voudrais juste avoir les valeurs x, et y d'une chaine s='X=-1, Y=-1'
    eval(s) ne fonctionne pas

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Une chaine comportant une affectation ('=') n'est pas une expression, mais une instruction. Elle ne peut pas être calculée avec eval.

    De plus, 'X=-1, Y=-1' est un tuple à cause de la virgule. Il faudrait mettre un point-virgule pour que ce soit un séparateur acceptable entre 2 instructions.

    On peut donc faire ce que tu souhaites avec l'une des 2 méthodes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    exec 'X=-1; Y=-1'
    exec 'X, Y = -1, -1'
    L'exécution donnera bien X=-1 et Y=-1, mais l'utilisation d'exec n'est pas conseillé.

    Tyrtamos

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    exec n'est pas conseillé? parcequ'il peut écraser une valeur deja existante?

    avec une virgule au lieu du ;
    y a t'il moyen de recuperer 'X=28.00, Y=21.00' en tuple puis de faire exec sur chacun des 2 pour avoir x et y
    ou je fais un string.replace(',',';')

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par ____22 Voir le message
    exec n'est pas conseillé? parcequ'il peut écraser une valeur deja existante?
    Entre autres. En tout cas, ce n'est pas de la bonne programmation. On l'utilise quand on ne peut pas faire autrement.

    Sinon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    s = 'X=-1,Y=-1'
    for k in s.split(','):
        exec k
    Attention: x et X sont des variables différentes sous Python!

    Tyrtamos

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Entre autres. En tout cas, ce n'est pas de la bonne programmation. On l'utilise quand on ne peut pas faire autrement.
    autrement qu'y a t'il de mieux?
    s='X=-1,Y=-1'
    (x,y) = eval(s.replace('X=','').replace('Y=','')

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Le dernière solution avec eval est mieux. Mais en fait, si tu pars de s='X=-1, Y=-1', tu n'as pas beaucoup le choix. Il vaudrait mieux éviter d'arriver à cette chaine, si tu peux, en jouant sur le code précédent. Si tu ne peux pas, continue comme ça.

    Tyrtamos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/05/2012, 12h22
  2. Réponses: 3
    Dernier message: 06/06/2011, 21h20
  3. Virus eval(base64_decode( et recherche de string sur ftp
    Par Chricrix dans le forum Sécurité
    Réponses: 0
    Dernier message: 17/10/2010, 19h49
  4. Evaluer un string text avec code PHP: Eval?!
    Par Just dans le forum Langage
    Réponses: 5
    Dernier message: 04/09/2010, 10h42
  5. [String] équivalent de la fonction eval() en javascript
    Par jeyce dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 01/09/2004, 08h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo