Python 无法处理来自 zipfile.BadZipFile 的异常

Posted

技术标签:

【中文标题】Python 无法处理来自 zipfile.BadZipFile 的异常【英文标题】:Python cant handle exceptions from zipfile.BadZipFile 【发布时间】:2016-08-25 20:46:36 【问题描述】:

如果一个zip文件损坏需要处理,所以它只是传递这个文件并可以继续下一个。

在下面的代码示例中,我试图捕获异常,所以我可以通过它。但是当 zipfile 损坏时我的脚本失败*,并给我“正常”回溯错误*而不是打印“我的错误”,但如果 zipfile 正常,则运行正常。

这是我正在处理的代码的简约示例。

path = "path to zipfile" 

from zipfile import ZipFile

with ZipFile(path) as zf:
    try:
        print "zipfile is OK"
    except BadZipfile:
        print "Does not work "
        pass

部分回溯告诉我:raise BadZipfile, "File is not a zip file"

【问题讨论】:

你忘记from zipfile import BadZipfile了吗? try-except 仅捕获try 内发生的错误。为什么这段代码会输入try 您的 try 块可能应该围绕 with 块而不是您拥有它的方式。 Vsminkov;不,我忘记了。但它没有改变任何东西:从 zipfile 导入 ZipFile 从 zipfile 导入 BadZipfile with ZipFile(path) as zf: try: print "zipfile is OK" except BadZipfile as fail: print "Does not work", 失败通过 @FamousJameous 和 @Vminskov 现在成功了:from zipfile import ZipFile from zipfile import BadZipfile try: with ZipFile(path) as zf: print "zipfile is OK" except BadZipfile as fail: print "Does not work ", fail pass 【参考方案1】:

您需要将上下文管理器放入 try-except 块中:

try:
    with ZipFile(path) as zf:
        print "zipfile is OK"
except BadZipfile:
    print "Does not work "

错误是由ZipFile 引发的,因此将其置于外部意味着无法找到引发异常的处理程序。此外,请确保从 zipfile 正确导入 BadZipFile

【讨论】:

以上是关于Python 无法处理来自 zipfile.BadZipFile 的异常的主要内容,如果未能解决你的问题,请参考以下文章

我如何可互换地处理来自 2 个列表的对象

无法将 s3 与来自 aws lambda 的 ec2 文件夹同步

无法以角度 6 处理来自 Firebase 的日期

无法在 Python 中显示来自 Access 的数据(通过 SQL)

来自 geocodeAddressString 的无法识别的选择器错误处理结果

无法在另一个 python 脚本中使用来自 python 函数的属性