Почему tarfile.extractall игнорирует ошибки по умолчанию?
Модуль tarfile в Python по умолчанию игнорирует ошибки при извлечении, если только errorlevel
установлен либо 1
или же 2
(или же debug
в 1
если только сообщения об ошибках должны быть напечатаны).
Попробуйте сделать mkdir /tmp/foo && sudo chown root /tmp/foo && chmod a-w /tmp/foo
и используя tarfile
извлечь файл.tar.gz поверх /tmp/foo
- вы увидите, что ваш код Python вообще не выдал никаких исключений. Файлы не были бы извлечены за /tmp/foo
который по-прежнему является пустым каталогом.
Почему это поведение? Кто / что выигрывает от этого поведения по умолчанию? Другими словами, кто и что хотел бы игнорировать, скажем, ошибки прав доступа при распаковке tar-файла?
1 ответ
Кстати, это неприятное поведение будет изменено в Python 2.7 и 3.2. http://svn.python.org/view?view=rev&revision=76780 Видимо, причина игнорирования ошибок прежде была в том, чтобы больше походить на GNU tar, который игнорирует ошибки.