以下代码(试图“打开”提供错误密码的加密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的UnRAR库中检查RAR文件的密码是否正确,而没有链接异常?
简而言之: UnRAR库为引发(随机)不同的异常--相同类型的错误(即提供错误的密码)。在大多数情况下,它会引发BadRarFile,但有时会引发RuntimeError。捕获RuntimeError已经够糟糕的了(但是在这里我们至少可以检查args),但是如果还捕获了except unrar.rarfile.BadRarFile,我们甚至无法区分(a)密码错误或(b) RAR文件是坏的错误。
发布于 2019-12-21 14:25:20
您可以链接多个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")除了使用不同的错误信息“错误密码或缺陷文件”和“错误密码或其他什么”之外,不幸的是,我看不到任何改进的可能性。
简而言之,
:UnRAR库为引发(随机?)不同的异常--相同类型的错误(即提供错误的密码)。在大多数情况下,它会引发
BadRarFile,但有时会引发RuntimeError。
根据RAR文件规范的版本,可能已经更改了错误密码的处理方式。也许不可能区分损坏的文件和错误的密码与RAR文件的更新版本,而这是可能的旧文件。(或者是反过来。)
如果“原始”unrar命令没有这个问题,那么它可能是您的Python库中上游的一个bug。
https://stackoverflow.com/questions/59436516
复制相似问题