UnboundLocalError:在赋值前引用了局部变量...
我遇到了一个UnboundLocalError
错误,因为我在一个没有执行的if语句里用了一个模板值。请问这种情况通常应该怎么处理呢?
class Test(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
greeting = ('Hello, ' + user.nickname())
else:
self.redirect(users.create_login_url(self.request.uri))
...
template_values = {"greeting": greeting,
}
错误信息:
UnboundLocalError: local variable 'greeting' referenced before assignment
2 个回答
2
我想我需要先解释一下问题:在创建模板值的时候,你使用了一个问候语的变量。如果没有用户,这个变量就不会被设置。
处理这种情况没有一个标准的方法。常见的做法有:
1. make sure that the variable is initialized in every code path (in your case: including the else case)
2. initialize the variable to some reasonable default value at the beginning
3. return from the function in the code paths which cannot provide a value for the variable.
就像Daniel说的,我怀疑在重定向调用之后,你不应该再产生任何输出,所以修正后的代码可能是这样的:
class Test(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
greeting = ('Hello, ' + user.nickname())
else:
self.redirect(users.create_login_url(self.request.uri))
return
...
template_values = {"greeting": greeting,
}
3
只需切换:
class Test(webapp.RequestHandler):
def err_user_not_found(self):
self.redirect(users.create_login_url(self.request.uri))
def get(self):
user = users.get_current_user()
# error path
if not user:
self.err_user_not_found()
return
# happy path
greeting = ('Hello, ' + user.nickname())
...
template_values = {"greeting": greeting,}