尝试在 pd.ExcelWriter 中捕获 PermissionError 以在关闭电子表格后调用函数
Try Catch for PermissionError in pd.ExcelWriter to recall function after closing spreadsheet
我有一个接受 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] Permission denied: 'Output.xlsx'
我想添加一个 try/catch 来捕获创建 "Output_copy.xlsx" 的 PermissionError,或者更好的是,提示说 "Close the Output spreadsheet and press 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.")
我通过在主程序中对 createSpreadsheet 函数的实际调用包装 try 和 except 来解决这个问题。
try:
dm.createSpreadsheet(updateSimilaritySummaryDf)
except:
input("Close the spreadsheet and try again...")
dm.createSpreadsheet(updateSimilaritySummaryDf)
我有一个接受 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] Permission denied: 'Output.xlsx'
我想添加一个 try/catch 来捕获创建 "Output_copy.xlsx" 的 PermissionError,或者更好的是,提示说 "Close the Output spreadsheet and press 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.")
我通过在主程序中对 createSpreadsheet 函数的实际调用包装 try 和 except 来解决这个问题。
try:
dm.createSpreadsheet(updateSimilaritySummaryDf)
except:
input("Close the spreadsheet and try again...")
dm.createSpreadsheet(updateSimilaritySummaryDf)