如果脚本停止执行,如何创建 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()
我正在读取一个 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()