未绑定的本地错误我无法解决

时间:2014-01-10 00:04:54

标签: python

我正在尝试构建一个转换计算器,我相信我说得对,但我一直在

“UnboundLocalError:在赋值之前引用的局部变量'F2C'

这是否意味着我使用了错误的密钥?或者这是否意味着我编写函数的顺序是问题? 当我运行代码时,代码的开始部分正常工作,但我无法弄清楚错误试图告诉我的内容。

以下是代码部分:

def select():
displayMenu();
choice = input ('Enter choice number:')
if (choice == 1):
    F2C();
elif (choice == 2):
    C2F();
elif (choice == 3):
    I2C();
elif (choice == 4):
    C2I();
elif (choice == 5):
    G2L();
elif (choice == 6):
    L2G();
elif (choice == 7):
    Y2M();
elif (choice == 8):
    M2Y();
elif (choice == 9):
    P2K();
elif (choice == 10):
    K2P();

我使用的语法不正确吗?

2 个答案:

答案 0 :(得分:3)

主要问题是F2C未在您可以访问的任何地方定义。

这在您向我们展示的片段中很明显......但在您的真实代码中,可能是它已定义某处。问题在于无论在何处定义,它都不在此模块的全局变量中。最有可能的是:

  • 您在另一个模块中定义了它,并执行了import other_module - 在这种情况下,该函数名为other_module.F2C,而不是F2C
  • 您在另一个模块中定义了它,甚至没有导入该模块,在这种情况下该功能根本不存在。
  • 你不小心在其他一些函数中定义了它(通过缩进你的缩进),这意味着它是函数的本地函数而不是整个模块的全局函数。
  • 您稍后在函数中为F2C分配了一些其他值。再次,可能是偶然(通过缩进你的缩进)。当你在这个函数中说F2C时,Python会猜测你想要使用局部变量而不是全局函数。但是尚未分配局部变量。

它特别是UnboundLocalError而不是NameError这一事实是一个有用的线索:它意味着Python认为这应该是一个局部变量而不是全局变量,这几乎肯定意味着你要么定义它或者在同一个函数中为F2C 分配一个值 ...很可能是因为你在这个函数中缩进了一堆其余的脚本。

答案 1 :(得分:1)

UnboundLocalError表示F2C在本地定义之前使用 ,即

  • 在使用之前未定义(全局,本地)
  • 之后

示例:

def f():
    print(a) # assuming there is no global `a`; it raises UnboundLocalError
    a = 1