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) –