似乎数据快照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数据库中不存在
答案 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:“ 生成器与返回数组的函数非常相似,因为生成器具有参数,可以被调用,并生成值序列。但是, 而不是构建包含所有值并一次返回所有值的数组,生成器一次生成一个值,这需要较少的内存,并允许调用方立即开始处理前几个值”