Python UnboundLocalError:调用函数输出时

Python UnboundLocalError:调用函数输出时,python,Python,我想将值列表从0、1和2转换为2、2;1,2和1,1。我写了一个函数,应该这样做: 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、1和2转换为2、2;1,2和1,1。我写了一个函数,应该这样做:

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
,因此您在ipython会话中遇到了一些问题

我会用这个来代替:

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

您向我们展示的代码不会引发
UnboundLocalError
;确保使用的是正确的
dec2()
函数版本。为什么不早点从
dec2()
返回,或者更好的方法是使用映射呢?我刚刚编写了这个函数,所以没有版本可供讨论。。。恐怕我对地图绘制不太熟悉!我已经通过脚本运行了原始代码,事实上,看起来我的代码还可以。你知道我的ipython有什么问题吗?@branwen85:我猜你还有一个以前的版本,你没有完成编辑。或者你不小心给一个更新的版本命名了一个拼写错误。