如何使用Python的unrr库记录错误的密码?

2024-04-30 06:33:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

from unrar import rarfile
import unrar 

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

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

<class 'unrar.rarfile.BadRarFile'>
Invalid RAR file.

但有时它会输出:

<class 'RuntimeError'>
Bad password for Archive

如何使用Python的unrr库检查RAR文件的密码是否正确,而不链接异常

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


Tags: 文件import密码错误情况passwordclassprint
1条回答
网友
1楼 · 发布于 2024-04-30 06:33:57

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

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")

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

In short: UnRAR library raises (randomly?) different exception for the same type of error (namely, wrong password supplied). In most of the cases it raises BadRarFile but sometimes it raises RuntimeError.

根据RAR文件规范的版本不同,处理错误密码的方式也可能有所不同。可能无法用较新版本的RAR文件区分损坏的文件和错误的密码,而对较旧的文件则可以(或者反过来说。)

如果“original”unrar命令没有这个问题,那么它可能是Python包装库上游的一个bug

相关问题 更多 >