special_func pour éviter la répétition try-except :
def special_func(test_case_dict):
final_dict = {}
exception_dict = {}
def try_except_avoider(test_case_dict):
try:
for k,v in test_case_dict.items():
final_dict[k]=eval(v) #Si aucune exception, évalue la fonction et l'ajoute à final_dict
except Exception as e:
exception_dict[k]=e #extrait l'exception
test_case_dict.pop(k)
try_except_avoider(test_case_dict) #fonction récursive pour gérer les fonctions restantes
finally: #nettoyage
final_dict.update(exception_dict)
return final_dict #combine le dictionnaire des exceptions et final_dict
return try_except_avoider(test_case_dict)
Exécuter le code :
def add(a,b):
return (a+b)
def sub(a,b):
return (a-b)
def mul(a,b):
return (a*b)
case = {"AddFunc":"add(8,8)","SubFunc":"sub(p,5)","MulFunc":"mul(9,6)"}
solution = special_func(case)
La sortie ressemble à :
{'AddFunc': 16, 'MulFunc': 54, 'SubFunc': NameError("name 'p' is not defined")}
Pour convertir en variables :
locals().update(solution)
Les variables ressembleraient à :
AddFunc = 16, MulFunc = 54, SubFunc = NameError("name 'p' is not defined")