Python Glossary English

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Сообщить о неточности