A propos de exec()

Fermé
noradan Messages postés 17 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 8 août 2020 - 18 janv. 2014 à 00:40
 Utilisateur anonyme - 18 janv. 2014 à 11:08
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"

2 réponses

ElementW Messages postés 4764 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 295
Modifié par gravgun le 18/01/2014 à 11:11
'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
0
Utilisateur anonyme
18 janv. 2014 à 11:08
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.
0