Google Firestore NotFound异常不会被捕获

时间:2018-10-27 03:57:25

标签: python firebase google-cloud-firestore

似乎数据快照game_doc不为null(无),因此当我调用时,第一个 if 语句成功通过了if语句在我的数据快照上的方法to_dict()上,另一个不同的异常被调用:TypeError: 'NoneType' object is not subscriptable该异常在第二个 if 引发,该异常检查字段'updated_at '

try:
    # exists
    game_doc = db.collection(u'games').document(str(game['id'])).get()
    if game_doc is not None:
        game_dict = game_doc.to_dict()
        if game_dict['updated_at'] != game['updated_at']:
            # update
            print("Updating game")
            add_game(game)
except google.cloud.exceptions.NotFound:
    # add
    print("Adding game")
    add_game(game)

google.cloud.exceptions.NotFound从未被捕获,并且 游戏 集合在我的Firestore数据库中不存在

1 个答案:

答案 0 :(得分:0)

Python中的Firestore返回生成器,这些生成器是在接收到来自客户端的请求之后创建的,并且在查询单个文档或多个文档时都会发生。某些返回一个且仅一个对象的API可能会返回google.cloud.exceptions.NotFound。您可能正在寻找的是:

try:
    game_doc = db.collection(u'games').document(str(game['id'])).get()
    game_dict = game_doc.to_dict()
    # exists
    if game_dict is not None:
        if game_dict['updated_at'] != game['updated_at']:
            # update
            print("Updating game")
            add_game(game)
    else:
        # add
        print("Adding game")
        add_game(game)
except:
    # Handle Other Exceptions.

要进一步了解generators:“ 生成器与返回数组的函数非常相似,因为生成器具有参数,可以被调用,并生成值序列。但是, 而不是构建包含所有值并一次返回所有值的数组,生成器一次生成一个值,这需要较少的内存,并允许调用方立即开始处理前几个值