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.