如果脚本停止执行,如何创建 excel 文件

How to create an excel file if the script stop executing

我正在读取一个 excel 文件,其中包含多个唯一编号,我用它在 REST API 上执行请求 activity。在程序结束时,我试图编写另一个 excel 文件,我将状态写为 'Success' 或 'Fail'。

问题是,我正在读取一个包含超过 10 万个数字的数据的文件。因此,如果我的程序因任何原因停止,甚至我故意停止它,输出 excel 文件永远不会创建。我如何确保在我的脚本 运行.

之前获取输出文件

这是我的代码。

from openpyxl import Workbook
from openpyxl import load_workbook
import requests
from datetime import datetime

def api_status():
    wk = Workbook()
    ws = wk.active

    start_row = 2
    start_column = 1
    status_column = 2

    wk = load_workbook("Data-File.xlsx")
    source = wk["Sheet"]

    global IDNO
    for id_list in source['A']:
        IDNO = id_list.value
        url = "someURL"
        payload = {'id_no': str(IDNO)}
        headers = {}
        response = requests.request("POST", json_url, data=json.dumps(payload), headers=headers)
        json_obj = response.json()

        ws.cell(row=start_row, column=start_column).value = IDNO

        json_message = (json_obj.get('message'))
        if json_message == "Success":
            ws.cell(row=start_row, column=status_column).value = "Success"
            start_row += 1

        else:
            print("NO")
            ws.cell(row=start_row, column=status_column).value = "FAIL"
            start_row += 1

    wb.save("STATUS-FILE-%s.xlsx" % datetime.now().strftime("%d-%m-%Y_%I-%M-%S_%p"))

api_status()

您只需使用 try... except 回退一些代码。替换此行:

api_status()

使用这段代码:

try:
    api_status()
except:
    # CODE TO WRITE YOUR "FAIL" STATUS

或者我们可以在函数内部的循环中这样做。当然,还有更多的东西。您可以指定针对不同错误类型采取的具体操作,或者您可能希望将 try...except 块放在函数内部以控制特定行失败并执行其余部分。

我假设最有可能的错误来自您的网络请求。在那种情况下:

try:
    response = requests.request("POST", json_url, data=json.dumps(payload), headers=headers)
    json_obj = response.json()
except:
    json.obj = {}

如果请求不起作用,通过将 json_obj 设为空字典,我保证下一行将在您的 excel 中写入 FAIL 而不是 Success

结合这两种想法以确保您的代码达到 save 看起来像这样(使用 finally 以确保它在任何可能的情况下运行):

from openpyxl import Workbook
from openpyxl import load_workbook
import requests
from datetime import datetime

def api_status():
        wk = Workbook()
        ws = wk.active

        start_row = 2
        start_column = 1
        status_column = 2

        wk = load_workbook("Data-File.xlsx")
        source = wk["Sheet"]
    try:
        global IDNO
        for id_list in source['A']:
            IDNO = id_list.value
            url = "someURL"
            payload = {'id_no': str(IDNO)}
            headers = {}
            try:
                response = requests.request("POST", json_url, data=json.dumps(payload), headers=headers)
                json_obj = response.json()
            except:
                json.obj = {}

            ws.cell(row=start_row, column=start_column).value = IDNO

            json_message = (json_obj.get('message'))
            if json_message == "Success":
                ws.cell(row=start_row, column=status_column).value = "Success"
                start_row += 1

            else:
                print("NO")
                ws.cell(row=start_row, column=status_column).value = "FAIL"
                start_row += 1
    finally:
        wb.save("STATUS-FILE-%s.xlsx" % datetime.now().strftime("%d-%m-%Y_%I-%M-%S_%p"))

api_status()