繁体   English   中英

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

[英]How note a wrong password with Python's UnRAR library?

以下代码(尝试“打开”提供错误密码的加密 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 文件是坏的。

except缩小错误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 包装器库上游的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM