我正在尝试执行以下代码片段:
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/