如何记录 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
以缩小错误范围。不幸的是,如果提供了错误的密码,您的 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")
除了使用不同的错误消息 "Wrong password or defective file" 和 "Wrong password or something else",不幸的是,我看不到任何改进的可能性。
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 包装器库上游的错误。
以下代码(尝试“打开”提供错误密码的加密 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
以缩小错误范围。不幸的是,如果提供了错误的密码,您的 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")
除了使用不同的错误消息 "Wrong password or defective file" 和 "Wrong password or something else",不幸的是,我看不到任何改进的可能性。
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 raisesRuntimeError
.
根据 RAR 文件规范的版本,可能会更改处理错误密码的方式。也许使用较新版本的 RAR 文件无法区分损坏的文件和错误的密码,而这对于较旧的文件是可能的。 (或者反过来。)
如果 "original" unrar
命令没有这个问题,它可能是你的 Python 包装器库上游的错误。