A propos de exec()
noradan
Messages postés
20
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je suis avec Python 33
j'ai besoin de faire exécuter exec dans une fonction et ça ne fonctionne pas§
Je ne comprends pas pourquoi dans un script :
exec('toto=[1,2,3]')
print(toto)
renvoie bien [1,2,3] dans le shell
et pourquoi
def fct():
exec('toto=[1,2,3]')
print(toto)
fct()
dans le même script renvoie une erreur "global name toto undefined"
je suis avec Python 33
j'ai besoin de faire exécuter exec dans une fonction et ça ne fonctionne pas§
Je ne comprends pas pourquoi dans un script :
exec('toto=[1,2,3]')
print(toto)
renvoie bien [1,2,3] dans le shell
et pourquoi
def fct():
exec('toto=[1,2,3]')
print(toto)
fct()
dans le même script renvoie une erreur "global name toto undefined"
2 réponses
-
'lut, la version 3 a introduit plein de changements; dont la manière dont on gère les variables/fonctions accessibles par
exec
.
Quand on regarde la doc, on s'aperçoit que 2 paramètres peuvent être ajoutés: ils servent à définir les objets accessibles par le code, le premier étant les variables globales (donc on ne va rien mettre vu que ton code ne fait qu'une assignation; les variables builtin sont ajoutées toutes seules si absentes de toute façon), le deuxième étant un conteneur pour les variables locales; vide par défaut, qui se remplira.
Un exemple sera probablement plus compréhensible:def fct(): variables = {} exec('toto=[1,2,3]', {}, variables) print(variables["toto"]) fct()$ python3.3 test.py [1, 2, 3]
Ça marche!
EDIT: mais comme fred1599 le dit,exec
c'est pas bien!
from human import idiocy
del idiocy -
La façon dont tu conçois ton code doit être mauvaise, exec est une très mauvaise pratique.
Tu pourrais peut-être expliqué le pourquoi tu as besoin d'utiliser exec, on trouvera sans doute une solution bien plus jolie et pythonnique.