Python exec()-Funktion
Aus der Python 3 Dokumentation
Diese Funktion unterstützt die dynamische Ausführung von Python-Code. object muss entweder ein String oder ein Code-Objekt sein. Wenn es ein String ist, wird der String als eine Suite von Python-Anweisungen geparst, die dann ausgeführt wird (es sei denn, es tritt ein Syntaxfehler auf) [...].
Einführung
Die exec()-Funktion in Python ist eine eingebaute Funktion, mit der Sie Python-Code, der in einem String gespeichert ist, dynamisch ausführen können. Dies kann sehr nützlich sein für Szenarien, in denen Sie von Benutzern bereitgestellten Code ausführen, Code zur Laufzeit generieren und ausführen oder sogar Mini-Interpreter oder Skripting-Umgebungen innerhalb Ihrer Anwendung erstellen möchten. Es sollte jedoch mit Vorsicht verwendet werden, da es bei unsachgemäßer Handhabung potenzielle Sicherheitsrisiken darstellen kann.
Syntax
exec(object[, globals[, locals]])
object: Der String, der den auszuführenden Python-Code enthält.globals(optional): Ein Dictionary, das den globalen Namensraum darstellt. Wenn nicht angegeben, wird der aktuelle globale Namensraum verwendet.locals(optional): Ein Dictionary, das den lokalen Namensraum darstellt. Wenn nicht angegeben, wird der aktuelle lokale Namensraum verwendet.
Grundlegende Verwendung
code_to_execute = "print('Hallo, exec()!')"
exec(code_to_execute)
Hallo, exec()!
Die exec()-Funktion kann auch zusammen mit der print()-Funktion verwendet werden, um Ausgaben auf der Konsole anzuzeigen.
Ausführen mehrerer Anweisungen
code = """
for i in range(5):
print(i)
"""
exec(code)
0
1
2
3
4
In diesem Beispiel wird die exec()-Funktion verwendet, um eine for-Schleife auszuführen, die über einen Bereich von Zahlen iteriert und jede Zahl auf der Konsole ausgibt.
Variablen modifizieren
x = 10
code = "x += 5"
exec(code)
print(x)
15
Verwendung von globals und locals
x = 5
code = "x = x * 2"
globals_dict = {"x": 10}
locals_dict = {"x": 20}
exec(code, globals_dict, locals_dict)
print(x)
print(globals_dict)
print(locals_dict)
5
{'x': 10}
{'x': 40}
Dynamische Funktionserstellung
def create_dynamic_function(name, args):
code = f"def {name}({', '.join(args)}): return sum({args})"
exec(code)
create_dynamic_function("add_numbers", ["a", "b", "c"])
result = add_numbers(2, 3, 5)
print(result)
10
In diesem Beispiel wird die exec()-Funktion verwendet, um eine dynamische Funktion zu erstellen, die eine Liste von Argumenten entgegennimmt und deren Summe zurückgibt.
Fehlerbehandlung
code = """
try:
print(undefined_variable)
except NameError as e:
print(f"Fehler: {e}")
"""
exec(code)
Fehler: name 'undefined_variable' is not defined
Sicherheitshinweis
user_input = input("Geben Sie Code zum Ausführen ein: ")
exec(user_input) # Achtung: Dies kann ein Sicherheitsrisiko darstellen, wenn es nicht ordnungsgemäß bereinigt wird.