gpt4 book ai didi

python - PermissionError 仅在第一次引发 - pd.ExcelWriter.save()

转载 作者:行者123 更新时间:2023-12-01 07:31:33 25 4
gpt4 key购买 nike

我正在尝试执行以下代码片段:

while 1:
print("test")
try:
tentativa += 1
writer.save()
print("test 2")
break
except PermissionError:
print("test 3")
if tentativa > 3:
sys.exit(-1)
input(f"(Tentativa {tentativa} de 3) Tecle ENTER para tentar novamente... ")

writer 对象是一个 pd.ExcelWriter,使用 xlsxwriter 作为引擎。当您使用 save() 方法时,它会尝试将 Excel 文件保存到我通知的目录中。这没问题。但是,当 Excel 文件打开时,此方法会引发PermissionError,因为它无法覆盖该文件。这也没有问题...

但是,如果我保持文件打开,并重试运行相同的方法,它不会引发异常,因此 except 子句没有什么可捕获的,它会打印“test”和“test” 2"并打破了 while...

第一个周期:“测试”和“测试 3”(文件已打开)

第二个周期:“测试”和“测试 2”(文件已打开)

有人知道为什么这个方法在第二个 while 周期没有引发异常吗?这是一个错误吗?

最佳答案

我从xlsxwriter中检查了Workbook对象,它具有以下代码:

def close(self):
"""
Call finalization code and close file.

Args:
None.

Returns:
Nothing.

"""
if not self.fileclosed:
self.fileclosed = 1
self._store_workbook()

由于内存中的实例在第二个 while 循环中是相同的,所以 workbook.filelined 仍然是 1 (True),因此方法 _store_workbook() 不会' t 被调用。随着这种情况的继续,不会引发任何异常。

所以我为此方法做了一个解决方法,即添加 writer.book.fileclose 行。

结果:

while 1:
print("test")
writer.book.fileclosed = 0
try:
tentativa += 1
writer.save()
print("test 2")
break
except PermissionError:
print("test 3")
if tentativa > 3:
sys.exit(-1)
input(f"(Tentativa {tentativa} de 3) Tecle ENTER para tentar novamente... ")

这个片段效果很好。

但不确定 fileclose 变量的目的是什么。

关于python - PermissionError 仅在第一次引发 - pd.ExcelWriter.save(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57187746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com