2012-04-12 3 views
-2

Mögliche Duplizieren:
declaring a global dynamic variable in pythonExec-Anweisung nicht richtig Namen definiert

>>> def f(): 
     global cat 
     exec 'cat'+'="meow"' 
     return 
>>> f() 
>>> cat 
Traceback (most recent call last): 
    File "<pyshell#23>", line 1, in <module> 
    cat 
NameError: name 'cat' is not defined 

Dies ist nur ein abgespeckte Beispiel für die Frage, die mir begegnet ist. In meinem eigentlichen Skript muss ich verschiedene Instanzen einer Klasse erstellen und benennen, daher die exec-Anweisung.

Gerade

exec 'cat'+'="meow"' 

direkt in der Shell Aufruf funktioniert gut, aber sobald es in einer Funktion verpackt ist, es scheint nicht mehr zu funktionieren.

Antwort

0

sieht aus wie die Exec ignoriert die globale, die Dokumentation ist ein bisschen vage. aber das funktioniert:

>>> def f(): 
...   global cat 
...   exec 'global cat; cat'+'="meow"' 
... 
>>> 
>>> f() 
>>> cat 
'meow' 
+2

es ist immer noch eine sehr schlechte Idee! –

+2

Entschuldigung, während ich weglaufe, um ein PEP zu schreiben, wenn ich das Schlüsselwort 'global' durch' global_and_I_really_understand_why_global_is_almost_always_bad' ersetzt habe. (und möglicherweise eine ähnliche PEP für 'exec'). – geoffspear

+0

Und übrigens, die erste 'globale Katze' ist völlig unnötig; nur der in der 'exec' ist in dem Bereich, in dem der Name verwendet wird. – geoffspear

3

Ich verstehe immer noch nicht, warum Sie exec verwenden, es ist ein schlechtes Design Wahl und Alternativen sind in der Regel einfacher, beispielsweise anstelle von globalen und dann etwas anderes Sie einfach diese nun

ns = {} 

def f(): 
    ns["cat"] = "miow" 

print ns 

tun konnte isn Ist das sauberer?

+0

Entschuldigung, aber das ist nicht einmal nahe, was ich vorhabe zu tun. Ich möchte eine globale Variable definieren, keinen Wörterbuchschlüssel. – Axim

+0

Warum? Warum möchten Sie eine globale Variable definieren? –

+0

Und was noch wichtiger ist, was brauchen Sie, dass ein globales Wörterbuch nicht kann? – delnan

Verwandte Themen