首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何注意Python的UnRAR库中的错误密码?

如何注意Python的UnRAR库中的错误密码?
EN

Stack Overflow用户
提问于 2019-12-21 13:18:11
回答 1查看 1K关注 0票数 1

以下代码(试图“打开”提供错误密码的加密RAR文件):

代码语言:javascript
复制
from unrar import rarfile
import unrar 

try:
    rarfile.RarFile("encrypted.rar", pwd="wrong_password")
except Exception as e:
    print(type(e))
    print(e)

大多数情况下,尽管RAR-文件没有其他问题(可以使用正确的密码进行解密而不会出错),但输出如下:

代码语言:javascript
复制
<class 'unrar.rarfile.BadRarFile'>
Invalid RAR file.

但有时它的产出是:

代码语言:javascript
复制
<class 'RuntimeError'>
Bad password for Archive

如何在Python的UnRAR库中检查RAR文件的密码是否正确,而没有链接异常?

简而言之: UnRAR库为引发(随机)不同的异常--相同类型的错误(即提供错误的密码)。在大多数情况下,它会引发BadRarFile,但有时会引发RuntimeError。捕获RuntimeError已经够糟糕的了(但是在这里我们至少可以检查args),但是如果还捕获了except unrar.rarfile.BadRarFile,我们甚至无法区分(a)密码错误或(b) RAR文件是坏的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-21 14:25:20

您可以链接多个except以缩小错误范围。不幸的是,如果提供了错误的密码,您的unrar库似乎会引发非特定的异常RuntimeError。因此,您不能100%确定错误的密码是否是错误的原因。

代码语言:javascript
复制
try:
    unrar.rarfile.RarFile("encrypted.rar", pwd="wrong_password")
except unrar.rarfile.BadRarFile:
    print("Specified file doesn't seem to be a proper RAR archive")
except RuntimeError:
    print("RuntimeError, possibly a wrong password")
except:
    print("Something else happened")

除了使用不同的错误信息“错误密码或缺陷文件”和“错误密码或其他什么”之外,不幸的是,我看不到任何改进的可能性。

简而言之,

:UnRAR库为引发(随机?)不同的异常--相同类型的错误(即提供错误的密码)。在大多数情况下,它会引发BadRarFile,但有时会引发RuntimeError

根据RAR文件规范的版本,可能已经更改了错误密码的处理方式。也许不可能区分损坏的文件和错误的密码与RAR文件的更新版本,而这是可能的旧文件。(或者是反过来。)

如果“原始”unrar命令没有这个问题,那么它可能是您的Python库中上游的一个bug。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59436516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档