#1 Le 28/10/2019, à 15: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, à 16: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, à 16: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é !
Hors ligne
#4 Le 28/10/2019, à 16: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