我得到了一个不寻常的错误,我认为这是因为对变量和函数使用相同的名称。我没有意识到这可能会导致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()
更改为某个其他函数名称时,不再出现此错误。相反,错误发生在下一行,可能是出于同样的原因。
答案 0 :(得分:1)
您不能对函数和本地名称使用相同的名称,不能。
名称的范围是在编译时根据绑定行为确定的;如果您使用名称作为函数参数或作为导入目标,或者在函数中指定它,那么它就是贯穿函数的本地名称。
因此,在post()
函数中,error_username
,error_password
,error_verify
和error_email
均为本地名称;你有为每个分配值的行。您不能先将这些名称用作全局变量,然后再将它们视为本地变量。
重命名本地名称,它们掩盖了这些功能。