2013-04-18 32 views
0

我想將0,1和2中的值列表轉換爲2,2; 1,2和1,1。我寫這是應該做的一個函數:UnboundLocalError:調用函數輸出時

def dec2(code):      
    if code == 0: 
     ret_val = '2','2' 
    elif code == 1: 
     ret_val = '1','2' 
    elif code == 2: 
     ret_val = '1','1' 
    else: 
     ret_val = '0','0' 
    return ret_val 

似乎只要我在現成的名單運行它要做工精細:

In [87]: a=[1,2,1,2] 

In [88]: b=[dec2(x) for x in a] 

In [89]: b 
Out[89]: [('1', '2'), ('1', '1'), ('1', '2'), ('1', '1')] 

然而,當我嘗試使用它取代字典值,我得到UnboundLocalError .:

In [82]: gtps 
Out[82]: {11: [1, 2, 1, 2], 22: [2, 2, 1, 1], 33: [1, 9, 0, 2]} 
[86]: for k,v in gtps.iteritems(): 
....:  tmp=[dec2(x) for x in v] 
....:  all[k]=tmp 
....: 
....: 
--------------------------------------------------------------------------- 
UnboundLocalError       Traceback (most recent call last) 

UnboundLocalError: local variable 'ret_val' referenced before assignment 

ANy的想法?

+0

你向我們展示了不會引發'UnboundLocalError'的代碼;確保你正在使用* right *'dec2()函數版本。爲什麼不從'dec2()'早期返回,或者更好,使用映射? –

+0

我剛寫了這個函數,所以沒有可以說的版本......恐怕我對映射不是很陌生! – branwen85

回答

0

您發佈的代碼無法在任何情況下提升UnboundLocalError,因此您在ipython會話中混淆了某些內容。

我會改用此:

_code_map = {0: ('2', '2'), 1: ('1','2'), 2: ('1','1')} 
def dec2(code): 
    return _code_map.get(code, ('0', '0')) 
+0

我已經通過腳本運行原始代碼,事實上,它看起來像我的代碼是好的。任何想法我的ipython有什麼問題? – branwen85

+0

@ branwen85:我想你還沒有完成編輯的舊版本。或者你也許意外地用錯字命名了一個新版本。 –