[Python-ideas] struct.unpack should support open files

Steven D'Aprano steve at pearwood.info
Mon Dec 24 08:33:14 EST 2018

On Mon, Dec 24, 2018 at 03:01:07PM +0200, Andrew Svetlov wrote:

> Handling files overcomplicates both implementation and mental space for API
> saving.

Perhaps. Although the implementation doesn't seem that complicated, and 
the mental space for the API not that much more difficult:

    unpack from bytes, or read from a file;


    unpack from bytes, which you might read from a file

Seems about the same to me, except that with the proposal you don't have 
to calculate the size of the struct before reading.

I haven't thought about this very deeply, but at first glance, I like 
Drew's idea of being able to just pass an open file to unpack and have 
it read from the file.

> Files can be opened in text mode, what to do in this case? What
> exception should be raised?

That is easy to answer: the same exception you get if you pass text to 
unpack() when it is expecting bytes:

py> struct.unpack(fmt, "a")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required, not 'str'

There should be no difference whether the text comes from a literal, a 
variable, or is read from a file.

> How to handle OS errors?

unpack() shouldn't try to handle them. If an OS error occurs, raise an 
exception, exactly the same way file.read() would raise an exception.


More information about the Python-ideas mailing list