Skip to content

ZstdFile raises AttributeError instead of io.UnsupportedOperation when iterating over a non-readable file #153037

Description

@lkk7

Bug report

Bug description:

All other compression modules raise io.UnsupportedOperation when iterating over a non-readable file:

next(iter(lzma.LZMAFile(io.BytesIO(), "w")))   # io.UnsupportedOperation: File not open for reading
next(iter(bz2.BZ2File(io.BytesIO(), "w")))     # io.UnsupportedOperation: ...
next(iter(gzip.GzipFile(fileobj=io.BytesIO(), mode="w")))  # ...

But ZstdFile.__next__ doesn't call _check_can_read(), so it dereferences self._buffer, which is None in write mode:

import io
from compression.zstd import ZstdFile

next(iter(ZstdFile(io.BytesIO(), "w")))

This results in:

AttributeError: 'NoneType' object has no attribute 'readline'

CPython versions tested on:

3.14, 3.15, CPython main branch

Operating systems tested on:

macOS, but it does not depend on OS

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    stdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions