special_func以避免尝试 - 除了重复:
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) #If no exception evaluate the function and add it to final_dict
except Exception as e:
exception_dict[k]=e #extract exception
test_case_dict.pop(k)
try_except_avoider(test_case_dict) #recursive function to handle remaining functions
finally: #cleanup
final_dict.update(exception_dict)
return final_dict #combine exception dict and final dict
return try_except_avoider(test_case_dict)
运行代码:
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)
输出的样子:
{'AddFunc': 16, 'MulFunc': 54, 'SubFunc': NameError("name 'p' is not defined")}
要转换为变量:
locals().update(solution)
变量会是什么样子:
AddFunc = 16, MulFunc = 54, SubFunc = NameError("name 'p' is not defined")
不能返回到'try'块一旦中断,没有。 –
我觉得没有。某些结构必须对流进行分段,并指定下一个要执行的点(此代码段中的“do_smth2”)。的 – Jokester
可能重复[A Python的方式为“恢复下一个”例外?](http://stackoverflow.com/questions/18655481/a-pythonic-way-for-resume-next-on-exceptions) –