New submission from Antti Haapala:

Just noticed when answering a question on StackOverflow 
(http://stackoverflow.com/q/35387843/918959) that on Python 3 iterating over a 
mmap object yields individual bytes as bytes objects, even though iterating 
over slices, indexing and so on gives ints

Example:

    import mmap

    with open('test.dat', 'rb') as f:
        mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
        for b in mm:
            print(b)
            # prints for example b'A' instead of 65
        mm.close()

I believe this should be fixed for the sake of completeness - the documentation 
says that "Memory-mapped file objects behave like both bytearray and like file 
objects." - however the current behaviour is neither like a bytearray nor like 
a file object, and quite confusing.

Similarly the `in` operator seems to be broken; one could search for space 
using `32 in bytesobj`, which would work for slices but not for the whole mmap 
object.

----------
messages: 260261
nosy: ztane
priority: normal
severity: normal
status: open
title: mmap.mmap.__iter__ is broken (yields bytes instead of ints)
type: behavior
versions: Python 3.2, Python 3.3, Python 3.4, Python 3.5, Python 3.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue26358>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to