我有一个采用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)
很高兴收到任何帮助。
要捕获的异常取决于您使用的引擎。由于您未在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.")