【问题标题】:unboundlocalerror local variable 'result' referenced before assignment [duplicate]分配之前引用的unboundlocalerror局部变量“结果”[重复]
【发布时间】:2017-11-07 12:36:51
【问题描述】:

这个错误被问了很多次,但我无法通过阅读它们来解决我的问题。 我的代码是:

def show_preference_list_isolated(isolated):
    preference_list_isolated = {
    (240, 323): [(164, 108),(178, 422),(152, 77),(126, 431)],
    (396, 168): [(178, 422),(164, 108),(126, 431),(152, 77)],
    (288, 235): [(178, 422),(126, 431),(152, 77),(164, 108)],
    (88, 248): [(164, 108),(178, 422),(152, 77),(126, 431)],
    }
    if isolated in preference_list_isolated:
        result = preference_list_isolated[isolated]
    return result

def begin_matching(isolated):
    preference_list_isolated = show_preference_list_isolated(isolated)
    print(preference_list_isolated)
    for relay in preference_list_isolated:
....

【问题讨论】:

  • 错误是什么?
  • unboundlocalerror 局部变量'result'在赋值前引用
  • 如果if 条件是False,result 会是什么???
  • 缩进在 python 中很重要。因为result 在if 块内缩进,这就是它的作用域。只有这样。所以在下一行(不缩进)result 不在范围内。因此,您在实例化之前引用了一个变量。
  • @Julien 你是对的。我添加“其他”并运行。谢谢

标签: python


【解决方案1】:

在您的代码中,问题出在以下部分:

if isolated in preference_list_isolated:
    result = preference_list_isolated[isolated]
return result

正如 Julien 指出的那样,如果在 preference_list_isolated 中找不到 isolated 会发生什么?此时它永远不会进入if loop,并且由于永远不会执行result = ...,因此没有分配给result。因此,当您尝试返回result 时,它会抛出一个错误,因为此时它根本不会被定义。


因此,为了纠正这一点,您的一个选择可能是在if loop 之前为其分配一个占位符 None,如下所示:

result = None
if isolated in preference_list_isolated:
    result = preference_list_isolated[isolated]
return result

或者,将return 语句放在if loop 中,如下所示:

if isolated in preference_list_isolated:
    result = preference_list_isolated[isolated]
    return result

【讨论】:

    猜你喜欢
    • 2013-02-28
    • 2021-12-16
    • 2021-04-02
    • 2021-08-19
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多