如果有例外,我该如何重试?

问题描述 投票:0回答:4

我正在编码使用gspread在Google表格中读写的剪贴簿。

在代码的“写”部分中,由于写配额限制导致了try-except,因此我必须添加APIError,因此当执行except时,它要等待100秒然后继续。问题是它忽略了导致除外的项目,但是应该重复该项目

    def process_cpf_list(self):

        # SKIP OVER COLUMN HEADING IN THE SPREADSHEET
        cpfs = self.sheet.col_values(self.cpf_col)[1:]
        bot_url = BOT()

        for row, cpf in enumerate(cpfs):
            nome, idade, beneficio, concessao, salario, bancos, bancocard, consig, card = bot_url.search_cpfs(cpf)

            # UPDATE THE SHEET
            print("Atualizando...")
            try:
                row = row + 2
                self.sheet.update_cell(row, self.nome_col, nome)
                self.sheet.update_cell(row, self.age_col, idade)
                self.sheet.update_cell(row, self.beneficio_col, beneficio)
                self.sheet.update_cell(row, self.concessao_col, concessao)
                self.sheet.update_cell(row, self.salario_col, salario)
                self.sheet.update_cell(row, self.bancos_col, bancos)
                self.sheet.update_cell(row, self.bancocard_col, bancocard)
                self.sheet.update_cell(row, self.consig_col, consig)
                self.sheet.update_cell(row, self.card_col, card)
                print('Cliente atualizado!')
            except APIError:
                print('Esperando para atualizar...')
                time.sleep(100)
                continue


cpf_updater = CpfSearch('TESTE')
cpf_updater.process_cpf_list()
python web-scraping google-sheets automation gspread
4个回答
1
投票
while True:
    try:
        # do some stuff
        break # we didn't hit the exception, exit the loop
    except APIError:
        # handle the exception...

1
投票

在这种情况下,不应重复该项目。当您使用for循环进行迭代时,一旦选中该项目,就不会再次选中它。

您可以添加一个while循环,除非更新成功,否则它将无限尝试更新(您可以添加max_tries,但我会留给您):

for row, cpf in enumerate(cpfs):
    nome, idade, beneficio, concessao, salario, bancos, bancocard, consig, card = bot_url.search_cpfs(cpf)

    # UPDATE THE SHEET
    print("Atualizando...")
    update_succeeded = False
    while not update_succeeded:
        try:
            row = row + 2
            self.sheet.update_cell(row, self.nome_col, nome)
            self.sheet.update_cell(row, self.age_col, idade)
            self.sheet.update_cell(row, self.beneficio_col, beneficio)
            self.sheet.update_cell(row, self.concessao_col, concessao)
            self.sheet.update_cell(row, self.salario_col, salario)
            self.sheet.update_cell(row, self.bancos_col, bancos)
            self.sheet.update_cell(row, self.bancocard_col, bancocard)
            self.sheet.update_cell(row, self.consig_col, consig)
            self.sheet.update_cell(row, self.card_col, card)
            print('Cliente atualizado!')
            update_succeeded = True
        except APIError:
            print('Esperando para atualizar...')
            time.sleep(100)

0
投票

您可以将Try:中的内容放在单独的函数中。如果该函数引发错误,它将自动捕获在您的except:块中。在那里您可以调用上述功能。


0
投票

为什么不只使用while循环?

for row, cpf in enumerate(cpfs):
    nome, idade, beneficio, concessao, salario, bancos, bancocard, consig, card = bot_url.search_cpfs(cpf)

    # UPDATE THE SHEET
    print("Atualizando...")
    while True:
        try:
            row = row + 2
            self.sheet.update_cell(row, self.nome_col, nome)
            self.sheet.update_cell(row, self.age_col, idade)
            self.sheet.update_cell(row, self.beneficio_col, beneficio)
            self.sheet.update_cell(row, self.concessao_col, concessao)
            self.sheet.update_cell(row, self.salario_col, salario)
            self.sheet.update_cell(row, self.bancos_col, bancos)
            self.sheet.update_cell(row, self.bancocard_col, bancocard)
            self.sheet.update_cell(row, self.consig_col, consig)
            self.sheet.update_cell(row, self.card_col, card)
            print('Cliente atualizado!')
            break
        except APIError:
            print('Esperando para atualizar...')
            time.sleep(100)
© www.soinside.com 2019 - 2024. All rights reserved.