Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/10/2019, à 16:55

19Phugoide

Commande exec dans une fonction, python

Bonjour à tous,

La programmation python est pleine de surprise, en voici une que je ne sais pas expliquer :
Voici mon code :

def foo():
    exec('b=2.71')
    print(b) 

exec('a=3.14')
print(a)
foo()

et voici la réponse de python :

3.14
Traceback (most recent call last):
  File "<tmp 4>", line 7, in <module>
    foo()
  File "<tmp 4>", line 3, in foo
    print(b)
NameError: name 'b' is not defined

Pourquoi python traite-il de manière différente exec quand celui est dans une fonction ? Et comment contourner le problème ?

Merci d'avance,
Hugo

Hors ligne

#2 Le 28/10/2019, à 17:26

mandeb

Re : Commande exec dans une fonction, python

çà irait comme çà ?

def foo():
    exec ('b=2.71')
    exec ('print(b)')

exec('a=3.14')
print(a)
foo()

cela donne :

mandeb@mandeb:~$ python3 test.py
3.14
2.71

Hors ligne

#3 Le 28/10/2019, à 17:36

19Phugoide

Re : Commande exec dans une fonction, python

Oh... Je suis très surpris par ce résultat. Mais pourquoi ça marche ? Je pensait que   >>> exec("mon code")   était strictement équivalent à   >>> mon code   , ce qui est apparemment faux...

En tout cas ta solution me va parfaitement, merci mandeb pour cette efficacité ! big_smile

Hors ligne

#4 Le 28/10/2019, à 17:57

mandeb

Re : Commande exec dans une fonction, python

En plus joli qui fonctionne aussi :

def foo():
    exec ('print(b)',{'b': 2.71})

exec('a=3.14')
print(a)
foo()

Hors ligne