2014-12-08 55 views
0

我正在尋找最佳方式,如何在python(2.6)中編寫wrap函數。該函數將一個命令(函數調用)作爲參數,並在該調用不順利時返回腳本(返回的錯誤值)。我看到的主要問題是,當嵌套調用失敗時,wrap必須檢測到此事件並終止腳本。 例如在python中模擬'wrap'的最佳方法

def foo1(x): 
    y = foo2(x) 
    return y 

def foo2(y): 
    y = 2**y 
    return y 

then I use wrap like this: 

wrap(foo1(2)) 

請考慮這個例子是非常簡單。

事情是,即使在foo2中發生錯誤時,換行也必須檢測到。

謝謝你的任何答案。

+0

不能單純使用'嘗試... except'陷阱在'wrap'功能的錯誤? – thefourtheye 2014-12-08 08:22:42

+0

這個問題對我來說並不那麼清楚。異常會傳播,你可以在任何級別捕捉它們。 – bosnjak 2014-12-08 08:31:58

+0

我認爲我將不得不使用try,但我可能想要封裝可執行應用程序(作爲子進程)。也會嘗試自己處理這個錯誤? – 2014-12-08 08:33:51

回答

0

除非你開始討論Python的字節碼,否則沒有明確的方法去做你所要求的。即使如此,目前尚不清楚無論是什麼呢錯誤檢測的意思是,因爲你可能希望從你的代碼中調用其它功能,如計算一個數值的sqrt

>>> def foo3(y): 
... y = sqrt(5) 
... return y 
... 

sqrt意味着什麼錯誤?

測試代碼的兩種最常見的方法是:

(1)只關心一個單一的價值。如果要測試多個功能,請分別測試每個功能:

wrap(foo1(2)) 
wrap(foo2(2)) 
wrap(foo3(2)) 

(2)使用例外。每個函數負責發出錯誤信號,並從包你檢測到錯誤:

def wrap(f, args, kwargs={}): 
    try: 
    f(*args, **kwargs) 
    except: 
    print("Error on f") 

def main(): 
    wrap(foo1, (2,)) 
    wrap(foo2, (2,)) 
    wrap(foo3, (2,)) 
相關問題