Python 3.12+tarfileисключение
tarfile.FilterError
исключения
Базовое исключение для членов архива, которые фильтр распаковки отказался извлекать; член лежит в атрибуте tarinfo.
Синтаксис
except tarfile.FilterError as e: e.tarinfo
Ловите его, а не каждый подкласс: «путь наружу», «абсолютная ссылка», «устройство» — всё это FilterError. Атрибут tarinfo называет виновный член, в сообщении часто абсолютный путь назначения. При errorlevel=1 (умолчание) отказ обрывает extractall(), и часть файлов уже лежит на диске — tarfile их не убирает, поэтому распаковывают во временный каталог.
Примеры
import io, os, tarfile
with tarfile.open('mix.tar', 'w') as tar:
for name in ('ok.txt', '../bad.txt'):
info = tarfile.TarInfo(name)
info.size = 2
tar.addfile(info, io.BytesIO(b'hi'))
with tarfile.open('mix.tar') as tar:
try:
tar.extractall('out', filter='data')
except tarfile.FilterError as e:
print(e.tarinfo.name) # → ../bad.txt
print(os.listdir('out')) # → ['ok.txt'] — первый файл уже распакован
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности