Ich brauche für mein Programm das exec-Statement, da der User selber etwas programmieren können soll. Und da es nur eine Test-Version ist, ist es auch egal das dadurch Sicherheitslücken entstehen.
Zum eigentlichen Problem:
Wenn ich exec benutze bekomme ich immer folgende Fehlermeldung:
"Could not execute because an error occurred:
SyntaxError: unqualified exec is not allowed in function 'ExecuteScript' it contains a nested function with free variables"
Ausser wenn ich exec nicht in eine Funktion einbinde kommt diese Meldung nicht. Aber wenn ich nicht in eine Funktion einbinden kann, dann kann ich es ja auch nicht aufrufen. Also was mache ich falsch?
exec funktioniert nicht
Ich habe noch nicht viel programmiert, da ich dieses exec zuerst mal testen wollte.
Und da kommt dan halt die Fehlemeldung.
Code: Alles auswählen
def ExecuteScript(Script):
try:
exec Script #Script ist ein String
except:
pass
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Also bei mir geht's mit ExecuteScript("print 'Hello World!'")
Ich würde es evtl. aber so machen:
Dann sieht man auch Fehlermeldungen...
Ich würde es evtl. aber so machen:
Code: Alles auswählen
def ExecuteScript(Script):
try:
exec Script #Script ist ein String
except Exception,e:
print "ERROR:",e
ExecuteScript("print 'Hello World!'")
Jetzt gehts bei mir auch. Hatte die Funktion in eine Klasse eingebaut und zu wenig eingerückt. Aber aufgrund der Fehlermeldung habe ich den Fehler natürlich bei exec gesucht und nicht bei der Einrückung. Das Mit den Fehlermeldungen wollte ich sowieso noch einbauen aber bevor ich mir die Arbeit mache, wollte ich sehen ob es überhaupt funktioniert.
Vielen Dank für die Hilfe.
Vielen Dank für die Hilfe.
Hallo ich bins nochmal.
Wie kann ich in einem exec-Statement auf eine Funktion zugreifen, die ich ausserhalb von exec definiert habe? Kann ich da irgendwas übergeben so wie bei eval oder was muss ich da machen?
Wie kann ich in einem exec-Statement auf eine Funktion zugreifen, die ich ausserhalb von exec definiert habe? Kann ich da irgendwas übergeben so wie bei eval oder was muss ich da machen?
Wie wäre es mit einer simpelen import Funktion am Anfang des auszuführenden Skriptes?
Aber sag mal: Jens hat schon recht, wenn er Beispielcode (oder eine Beschreibung einfordert). Sonst rät man ja nur rum.
Gruß,
Christian
Aber sag mal: Jens hat schon recht, wenn er Beispielcode (oder eine Beschreibung einfordert). Sonst rät man ja nur rum.
Gruß,
Christian
Es ging ja nur darum wie dass man das mit exec macht. Mit eval kann ich es so machen eval('Audruck', globals, locals). Ich habe aber nicht herausgefunden wie das mit exec geht, da es so schlecht dokumentiert ist. Habe es inzwischen rausgefunden exec code in globals, locals. Dann kann ich meine Funktion in globals oder locals übergeben.
Für diese Frage machte es in meinen Augen keinen Sinn Code von mir zu posten, da es ja um die grundsätzliche Funktionalität von exec ging. Aber Haupsache ich habs jetzt. Danke für eure Hilfe.
Für diese Frage machte es in meinen Augen keinen Sinn Code von mir zu posten, da es ja um die grundsätzliche Funktionalität von exec ging. Aber Haupsache ich habs jetzt. Danke für eure Hilfe.
`exec` ist ein Schlüsselwort mit dem man beliebigen Code ausführen kann und `eval` ist eine Funktion und der Code muss ein Ausdruck sein, dessen Ergebnis als Rückgabewert von `eval` dient. `eval` hat ähnliche Beschränkungen wie ``lambda``, zum Beispiel geht das hier nicht: ``eval('print "hallo"')``.