Python 中这个 If 条件语句是如何工作的?

0 投票
4 回答
1267 浏览
提问于 2025-04-16 10:00
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
    def get(self):
        user = users.get_current_user()

        if user:
            self.response.headers['Content-Type'] = 'text/plain'
            self.response.out.write('Hello, ' + user.nickname())
        else:
            self.redirect(users.create_login_url(self.request.uri))

application = webapp.WSGIApplication(
                                     [('/', MainPage)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

我不太明白这一行是怎么工作的:

    if user:
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Hello, ' + user.nickname())
    else:
        self.redirect(users.create_login_url(self.request.uri))

我在猜测 users.get_current_user() 是不是返回一个布尔值?如果是这样的话,那它怎么会有 .nickname() 这个方法呢?

谢谢你的指导。

4 个回答

2

users.get_current_user() 这个函数会返回当前用户的信息对象,如果用户没有登录,就会返回 None。 在 Python 里,我们可以用下面的方式来检查一个变量的值是否是 None:

a = None
if not a:
  print "a values is None"
3

我怀疑 users.get_current_user() 这个函数会返回一个对象,如果没有当前用户的话,它会返回 None。在条件判断中,Python会把 None 当作 False 来处理。

不过,要注意的是,用这种方式来检查 None 其实并不是个好习惯,因为其他一些东西,比如空列表 [] 也会被当作 False。所以,代码应该改成这样:

    if user is not None:
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Hello, ' + user.nickname())
    else:
        self.redirect(users.create_login_url(self.request.uri))
8

这段代码主要是用来检查 user 是否是一个真实的对象,或者说它是不是 None。如果 userNone,那么代码就会进入 else 这个部分,然后跳转到一个“创建登录”的页面。

撰写回答