处理 Google App Engine 数据存储区 NoneType 错误

Handling Google App Engine datastore NoneType errors

我希望处理来自 Google App Engine ndb 数据存储区的 NoneType 错误。

这是我的代码:

def post(self):
    # get the email and password from the login form
    global u_qry
    email = self.request.get("email")
    password = self.request.get("password")

    try:
        u_qry = user_db.User.get_by_email(email)
    except BaseException, e:
        self.response.out.write(e, u_qry)
    else:
        self.response.out.write("User Recognised")
        self.response.out.write(u_qry)

当用户不存在时,except 子句不会捕获任何错误。

Output:
User Recognised None

为什么 except 子句没有捕捉到这个错误?什么异常可以用来捕捉这个错误?

我知道我可以在上面使用 if/else 语句,但想了解如何在 GAE 中使用 try/except 子句。

谢谢。

虽然您没有展示 User.get_by_email() 函数的实现方式,但我怀疑它只是基于查询。从查询返回空结果是一种完全有效的情况——没有现有的数据存储实体与查询匹配。这也不例外。

如果您打算将这种情况视为异常,您必须在 User.get_by_email() 中自己提出一个异常,在这种情况下,您可以在 post() 函数中捕获它。

或者您可以直接检查 u_qry 以获得 None 值。