Я хочу преобразовать список значений из 0, 1 и 2 в 2,2; 1,2 и 1,1. Я написал функцию, которая, как предполагается, делает, что:UnboundLocalError: при вызове функции output
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
ЛЮБЫЕ идеи?
код, который вы показали нам не возбудит 'UnboundLocalError'; убедитесь, что вы работаете с функциональной версией * right * 'dec2()'. И почему бы не просто вернуться раньше от dec2(), или еще лучше использовать сопоставление? –
Я только что написал эту функцию, поэтому нет версий, о которых можно было бы говорить ... Боюсь, что я не очень хорошо знаком с картографированием! – branwen85