Issue 3521: file.readline: bad exception recovery (original) (raw)

Created on 2008-08-07 22:36 by terry.reedy, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
file.readline.diff ajaksu2,2008-08-27 23:00 Adds isinstance(limit, int) to io.X.readline
Messages (5)
msg70866 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2008-08-07 22:36
WinXP, 3.0b2 >>>f=open('somefile', 'r') >>>f.readline(somefloat) Traceback (most recent call last): File "<pyshell#70>", line 1, in f.readline(1.0) File "C:\Program Files\Python30\lib\io.py", line 1766, in readline return line[:endpos] TypeError: slice indices must be integers or None or have an __index__ method At this point, any f.read or f.readline calls fail with a similar TypeError. The error recovery seems incomplete. The same does *not* happen with f.read(float). Recovery is complete and subsequent f.read/f.readline calls work. In 2.5, float size arg worked with a deprecation warning, so issue does not arise. I presume same is true in 2.6.
msg70867 - (view) Author: Guido van Rossum (gvanrossum) * (Python committer) Date: 2008-08-07 22:53
Good catch! This looks pretty simple to fix; I think a type check is missing (actually several, there are at least two implementations in io.py). In fact, the 2.6 version of io.py already has the necessary checks. (But merging those forward is not 100% trivial since in 3.0 the 'long' type doesn't exist.)
msg72049 - (view) Author: Daniel Diniz (ajaksu2) * (Python triager) Date: 2008-08-27 23:00
Patch attached, suggested test below. def test_readline(): for mode in ('r', 'rb', 'r+', 'r+b'): f = open(__file__, mode) try: f.readline(0.1) except TypeError: tmp = f.readline() f.close() print('OK') test_readline()
msg81364 - (view) Author: Daniel Diniz (ajaksu2) * (Python triager) Date: 2009-02-08 03:24
Maybe this one should be in 3.0.1? Benchmarking the isinstance approach against int() would be interesting. The io-c branch doesn't have this bug, so 3.1 is OK :)
msg86437 - (view) Author: Benjamin Peterson (benjamin.peterson) * (Python committer) Date: 2009-04-24 23:00
Fixed in r71855
History
Date User Action Args
2022-04-11 14:56:37 admin set github: 47771
2009-04-24 23:00:33 benjamin.peterson set status: open -> closedresolution: fixedmessages: +
2009-04-22 18:58:17 benjamin.peterson set priority: highassignee: benjamin.petersonnosy: + benjamin.peterson
2009-02-08 03:24:34 ajaksu2 set messages: +
2008-08-27 23:00:32 ajaksu2 set files: + file.readline.diffnosy: + ajaksu2messages: + keywords: + patch
2008-08-07 22:53:35 gvanrossum set keywords: + easynosy: + gvanrossummessages: +
2008-08-07 22:36:50 terry.reedy create