以下代码(试图“打开”提供错误密码的加密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文件错误
您可以链接多个
except
以缩小错误范围。不幸的是,如果提供了错误的密码,您的unrar
库似乎会引发不特定的异常RuntimeError
。因此,您无法100%确定错误的密码是否是导致错误的原因除了使用不同的错误信息“错误的密码或有缺陷的文件”和“错误的密码或其他东西”,不幸的是,我没有看到任何改进的可能性
根据RAR文件规范的版本不同,处理错误密码的方式也可能有所不同。可能无法用较新版本的RAR文件区分损坏的文件和错误的密码,而对较旧的文件则可以(或者反过来说。)
如果“original”
unrar
命令没有这个问题,那么它可能是Python包装库上游的一个bug相关问题 更多 >
编程相关推荐