Исключение NotFound в Google Firestore не попадает - PullRequest
0 голосов
/ 27 октября 2018

Кажется, что datasnapshot game_doc не является нулевым (None), и поэтому первый if успешно проходит и внутри if, когда я вызываю метод to_dict() в моем datasnapshot вызывается другое исключение: TypeError: 'NoneType' object is not subscriptable Это исключение выдается на втором , если , который проверяет поле 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 никогда не пойман, и коллекция games не существует в моей базе данных пожарного магазина

1 Ответ

0 голосов
/ 27 октября 2018

Firestore в Python возвращает генераторы, которые создаются после получения запроса от клиента, и происходит как при запросе одного документа, так и нескольких.Google.cloud.exceptions.NotFound может быть возвращен на некоторых API, которые возвращают один и только один объект.Возможно, вы ищете:

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.

Чтобы узнать больше о генераторах : " Генератор очень похож на функцию, которая возвращает массив, в том смысле, что генераторимеет параметры, может вызываться и генерирует последовательность значений, однако вместо создания массива , содержащего все значения и возвращающего их все сразу, генерирует значения по одному за раз, что требуетменьше памяти и позволяет вызывающему абоненту сразу начать обработку первых нескольких значений"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...