Python [Errno 13] - 保存用户打开的文件时的异常处理

Python [Errno 13] - Exception handling when saving a file that is opened by user

我正在使用 Pandas 和 Xlsxwriter 分析一些数据,然后定期为其他用户创建 Excel 简单报告。该报告应该总是被我导出的最后一个覆盖。此外,一旦我导出它,它就会自动打开以快速查看。

我遇到的唯一问题是,如果有人打开了该文件(或者即使我正在使用它,我必须承认这种情况发生了),我也会收到 [Errno 13]。

IOError: [Errno 13] Permission denied: '2320PLFY2018.xlsx'

所以我只是想在 XLSXWRITER 部分末尾为该 IOError 添加一些错误处理,让我知道它,并让我有机会关闭文件。从一个简单的尝试开始,只是为了给我一条错误消息。尝试了几次,但无法使其工作。这是一次尝试:

try:
    writer.save()
    os.startfile(company_code_choice + 'PLFY2018.xlsx')
except IOError as e:
    print(e.errno)

也尝试过不指定错误类型:

while True:
    try:
        writer.save()
        os.startfile(company_code_choice + 'PLFY2018.xlsx')
        break
    except:
        print "Close the file!"

我刚开始编写代码,如果这是一个显而易见的问题,我深表歉意... 我整个上午都在谷歌上搜索这个,并阅读了其他几个问题,但无法让它在我的代码上运行。提前致谢-

我能想到的可能导致此错误的最好的事情是,您在 try 语句中调用的函数之一正在处理自身内部的异常,因此您的异常处理变得无效。

要确保:

  1. 尝试从您的 try 块中手动抛出异常,以确保异常处理正常工作。
  2. 如果上述假设成立,您可以通过在调用之前和之后手动引发一次异常来确定哪个函数正在处理自身内部的异常。

为了证明我的意思:

while True:
    sleep(1)
    try:
        raise Exception("my exception")
        writer.save()
        os.startfile(company_code_choice + 'PLFY2018.xlsx')
        break
    except Exception as e:
        print ("Close the file: ", e)

你绝对应该捕获你引发的异常,否则你的代码有问题。如果发生异常行为,请尝试简单地或检查是什么阻止了异常行为。如果您下次可以捕获引发的异常:

while True:
    sleep(1)
    try:
        writer.save()
        raise Exception("my exception")
        os.startfile(company_code_choice + 'PLFY2018.xlsx')
        break
    except Exception as e:
        print ("Close the file: ", e)

这样你要么捕获你引发的异常,这意味着 writer.save() 不处理自身内部的异常,要么你得到同样的错误,这意味着 writer.save() 处理异常。通过在代码的整个 try 块中继续此过程,您必须能够找出是哪个函数造成了麻烦。

这是我现在能想到的最好的事情。我希望它有所帮助。但如果我是对的,那么你只能找出错误的根源,但我不知道你如何才能实现你想要的行为。所以也许你可以在文档中找到线索。