'在分配前引用的局部变量'错误,由于与函数名称混淆?

时间:2014-07-22 18:18:58

标签: python python-2.7

我得到了一个不寻常的错误,我认为这是因为对变量和函数使用相同的名称。我没有意识到这可能会导致Python出现问题。任何人都能解释一下吗?

代码(在类定义中):

def post(self):
    username = self.request.get("username")
    password = self.request.get("password")
    verify = self.request.get("verify")
    email = self.request.get("email")
    error_username = error_username(username) # SOURCE OF ERROR
    error_password = error_password(password)
    error_verify = error_verify(password, verify)
    error_email = error_email(email)
    if all( [error_username == "", error_password == "",
        error_verify == "", error_email == ""] ):
        self.redirect("/unit2/welcome?username=%s" % escape_html(username))
    else:
        self.write_form(username, email, error_username,
                        error_password, error_verify, error_email)

给出错误:

  File "/Users/max/python_projects/max-dev-udacity/signup.py", line 91, in post
    error_password = error_password(password)
UnboundLocalError: local variable 'error_password' referenced before assignment
INFO     2014-07-22 18:03:12,466 module.py:640] default: "POST /unit2/signup HTTP/1.1" 500 228

error_username()导入工作表的顶部。

注意,当我将error_username()更改为某个其他函数名称时,不再出现此错误。相反,错误发生在下一行,可能是出于同样的原因。

1 个答案:

答案 0 :(得分:1)

您不能对函数和本地名称使用相同的名称,不能。

名称的范围是在编译时根据绑定行为确定的;如果您使用名称作为函数参数或作为导入目标,或者在函数中指定它,那么它就是贯穿函数的本地名称。

因此,在post()函数中,error_usernameerror_passworderror_verifyerror_email均为本地名称;你有为每个分配值的行。您不能先将这些名称用作全局变量,然后再将它们视为本地变量。

重命名本地名称,它们掩盖了这些功能。