La fonction intégrée Python exec()
À partir de la documentation Python 3
Cette fonction prend en charge l'exécution dynamique de code Python. L'objet doit être soit une chaîne de caractères, soit un objet code. S'il s'agit d'une chaîne, celle-ci est analysée comme une suite d'instructions Python qui est ensuite exécutée (sauf en cas d'erreur de syntaxe) [...].
Introduction
La fonction exec() en Python est une fonction intégrée qui permet d’exécuter dynamiquement du code Python stocké dans une chaîne de caractères. Cela peut être très puissant pour les scénarios où vous souhaitez exécuter du code fourni par les utilisateurs, générer et exécuter du code à l’exécution, ou même construire des mini-interpréteurs ou des environnements de script au sein de votre application. Cependant, elle doit être utilisée avec prudence car elle peut potentiellement introduire des risques de sécurité si elle n’est pas gérée correctement.
Syntaxe
exec(object[, globals[, locals]])
object: La chaîne contenant le code Python à exécuter.globals(optionnel): Un dictionnaire représentant l’espace de noms global. S’il n’est pas fourni, il utilise l’espace de noms global actuel.locals(optionnel): Un dictionnaire représentant l’espace de noms local. S’il n’est pas fourni, il utilise l’espace de noms local actuel.
Utilisation de Base
code_to_execute = "print('Hello, exec()!')"
exec(code_to_execute)
Hello, exec()!
La fonction exec() peut également être utilisée avec la fonction print() pour afficher la sortie dans la console.
Exécution de Multiples Instructions
code = """
for i in range(5):
print(i)
"""
exec(code)
0
1
2
3
4
Dans cet exemple, la fonction exec() est utilisée pour exécuter une boucle for qui itère sur une plage de nombres et imprime chaque nombre dans la console.
Modification des Variables
x = 10
code = "x += 5"
exec(code)
print(x)
15
Utilisation de globals et 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}
Création de Fonction Dynamique
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
Dans cet exemple, la fonction exec() est utilisée pour créer une fonction dynamique qui prend une liste d’arguments et retourne leur somme.
Gestion des Erreurs
code = """
try:
print(undefined_variable)
except NameError as e:
print(f"Error: {e}")
"""
exec(code)
Error: name 'undefined_variable' is not defined
Note de Sécurité
user_input = input("Enter code to execute: ")
exec(user_input) # Caution: This can be a security risk if not properly sanitized.