为什么 tarfile.extractall 默认忽略错误?
Python 的 tarfile 模块默认情况下会忽略提取过程中的错误,除非将 errorlevel
设置为 1
或 2
(或将 debug
设置为 1
code> 如果只需要打印错误消息)。
尝试执行 mkdir /tmp/foo && sudo chown root /tmp/foo && chmod aw /tmp/foo
并使用 tarfile
通过 /tmp/foo
提取 .tar.gz 文件 - 您将看到您的 Python 代码抛出了异常毫无例外。这些文件不会通过/tmp/foo
提取,它仍然是一个空目录。
为什么会有这种行为?谁/什么会从这种默认行为中受益?换句话说,在解压缩 tar 文件时,谁/什么想要忽略权限错误?
Python's tarfile module ignores errors during extraction by default, unless errorlevel
is set to either 1
or 2
(or debug
to 1
if only error messages need to be printed).
Try doing a mkdir /tmp/foo && sudo chown root /tmp/foo && chmod a-w /tmp/foo
and using tarfile
to extract a .tar.gz file over /tmp/foo
-- you will see that your Python code threw no exceptions at all. The files would not have been extracted over /tmp/foo
which still is an empty directory.
Why this behavior? Who/what benefits from this default behavior? In other words, just who/what would want to ignore, say, permissions errors when decompressing a tarfile?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
FWIW,这种令人讨厌的行为将在 Python 2.7 和 3.2 中改变。 http://svn.python.org/view?view=rev&revision= 76780 显然之前忽略错误的原因是为了更像GNU tar,它忽略错误。
FWIW, this nasty behavior is will be changed in Python 2.7 and 3.2. http://svn.python.org/view?view=rev&revision=76780 Apparently the reason for ignoring the errors before was to be more like GNU tar, which ignores errors.