[英]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.