尝试关闭pd.ExcelWriter中的PermissionError以便在关闭电子表格后重新调用函数

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

我有一个采用DataFrame并创建电子表格的函数。

def createSpreadsheet(data):
    with pd.ExcelWriter('Output.xlsx', mode='w') as writer:
        data.to_excel(writer, sheet_name='Similarities')

我经常使用该程序,并不总是记得关闭前一个Output.xlsx文件-当我将其保持打开状态时,出现以下错误:PermissionError:[Errno 13]权限被拒绝:'Output.xlsx'

我正在尝试添加一个try / catch来捕获创建“ Output_copy.xlsx”的PermissionError,或者更好的是,提示您说“关闭Output电子表格并按Enter”,然后调用该函数。我尝试了以下操作,但仍然遇到错误(我也尝试了except子句,但未指定错误无济于事):

import pandas as pd
import openpyxl

def createSpreadsheet(data):
    try:
        with pd.ExcelWriter('Output.xlsx', mode='w') as writer:
            data.to_excel(writer, sheet_name='Similarities')
    except PermissionError:
        input("Close the spreadsheet and press enter.")
        createSpreadsheet(data)

很高兴收到任何帮助。

python pandas openpyxl
1个回答
0
投票

要捕获的异常取决于您使用的引擎。由于您未在pd.ExcelWriter中指定引擎,因此将使用默认引擎。在您的情况下,显然是xlsxwriter

因此,您有两个选择:要么指定openpyxl引擎并捕获PermissionError,要么指定xlsxwriter引擎并捕获xlsxwriter.exceptions.FileCreateError错误:

try:
    with pd.ExcelWriter(r'c:\temp\Output.xlsx', engine='openpyxl', mode='w') as writer:
        df.to_excel(writer, sheet_name='Similarities')
except PermissionError:
    input("Close the spreadsheet and press enter.")

import xlsxwriter

try:
    with pd.ExcelWriter(r'c:\temp\Output.xlsx', engine='xlsxwriter', mode='w') as writer:
        df.to_excel(writer, sheet_name='Similarities')
except xlsxwriter.exceptions.FileCreateError:
    input("Close the spreadsheet and press enter.")

或-为了安全起见-同时抓住两者(如果您已安装xlsxwriter):

import xlsxwriter
try:
    with pd.ExcelWriter(r'c:\temp\Output.xlsx', mode='w') as writer:
        df.to_excel(writer, sheet_name='Similarities')
except (xlsxwriter.exceptions.FileCreateError, PermissionError):
    input("Close the spreadsheet and press enter.")
© www.soinside.com 2019 - 2024. All rights reserved.