Jeffrey Kintscher <websur...@surf2c.net> added the comment:
I adapted the test code on StackOverflow to show the expected and actual values. I get this output using Python 2.7.16: opening myfile with wb writing 3 bytes to file ('f.tell(): expecting 3, got', 3) closing myfile opening myfile with a+b ('f.tell(): expecting 3, got', 3) writing 3 bytes to file ('f.tell(): expecting 6, got', 6) ('f.seek(0): expecting 0, got', None) ('f.tell(): expecint 0, got', 0) writing 3 bytes to file ('f.tell(): expecting 9, got', 9) writing 3 bytes to file ('f.tell(): expecting 12, got', 12) ('f.seek(0, io.SEEK_CUR): expecting 12, got', None) ('f.tell(): expecting 12, got', 12) ('f.seek(0): expecting 0, got', None) ("f.read(): expecting b'abcdefghijkl', got", 'abcdefghijkl') closing file removing file As described, I get different results using Python 3.7.3 as well as the master branch (Python 3.8.0a4+): closing myfile opening myfile with a+b f.tell(): expecting 3, got 3 writing 3 bytes to file f.tell(): expecting 6, got 6 f.seek(0): expecting 0, got 0 f.tell(): expecint 0, got 0 writing 3 bytes to file f.tell(): expecting 9, got 3 writing 3 bytes to file f.tell(): expecting 12, got 6 f.seek(0, io.SEEK_CUR): expecting 12, got 12 f.tell(): expecting 12, got 12 f.seek(0): expecting 0, got 0 f.read(): expecting b'abcdefghijkl', got b'abcdefghijkl' closing file removing file I wrote an equivalent C program using the stream I/O functions and get the same results as Python 2.7.16: opening file with wb writing 3 bytes to file ftell(f): expecting 3, got 3 closing file opening file with a+b ftell(f): expecting 3, got 3 writing 3 bytes to filftell(f): expecting 6, got 6 fseek(f, 0, SEEK_SET): expecting 0, got 0 ftell(f): expecting 0, got 0 writing 3 bytes to file ftell(f): expecting 9, got 9 writing 3 bytes to file ftell(f): expecting 12, got 12 fseek(f, 0, SEEK_CUR): expecting 0, got 0 ftell(f): expecting 12, got 12 fseek(f, 0, SEEK_SET): expecting 0, got 0 fread(buf, 1, 256, f): expecting 12, got 12 expecting 'abcdefghijkl', got 'abcdefghijkl' closing file removing file I consider this behavior to be a bug because Python 2.7 and C agree, but Python 3.7 behaves differently. Requiring that developers know and work around non-standard quirky behavior leads to extra work and error-prone code. ---------- nosy: +Jeffrey.Kintscher Added file: https://bugs.python.org/file48368/bpo-36411.py _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue36411> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com