classification
Title: PyArg_Parse* should raise TypeError for float parsed with integer format
Type: behavior Stage: resolved
Components: Versions: Python 3.2, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: mark.dickinson Nosy List: ezio.melotti, georg.brandl, haypo, marcin.wider, mark.dickinson, pitrou
Priority: normal Keywords: patch

Created on 2009-01-27 12:23 by mark.dickinson, last changed 2010-01-01 19:30 by mark.dickinson. This issue is now closed.

Files
File name Uploaded Description Edit
issue5080.patch mark.dickinson, 2009-12-21 13:53
Messages (11)
msg80649 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2009-01-27 12:23
Since Python 2.3, PyArg_ParseTuple and friends give a DeprecationWarning
for floating-point arguments where integers are expected.  From
http://www.python.org/download/releases/2.3/NEWS.txt:

- The PyArg_Parse functions now issue a DeprecationWarning if a float
  argument is provided when an integer is specified (this affects the 'b',
  'B', 'h', 'H', 'i', and 'l' codes).  Future versions of Python will
  raise a TypeError.

Can we turn that DeprecationWarning into a TypeError for 2.7?  (It's
already a TypeError in 3.x.) I'd like to see things like 'range(-0.3)'
and 'itertools.combinations(range(3), 5.1)' raise TypeError.

N.B. The relevant format codes in 2.7 include 'I' and 'n' in addition to
the six codes listed above.
msg92239 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2009-09-04 07:57
+1.
msg92400 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2009-09-07 23:27
+10. It would fix the os.urandom(1.2) bug. On Linux, os.urandom() displays
the following warnings and then go into an unlimited loop...

/usr/lib/python2.5/os.py:734: DeprecationWarning: integer argument expected,
got float
  bytes += read(_urandomfd, n - len(bytes))

read(1.2 - 1) ~> read(0.2) ~> read(0)...

Tolerate float as integers introduces "subtle" bugs like byte/unicode bugs...
msg95497 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-11-19 17:22
+1 for a TypeError too.
msg95538 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-11-20 12:36
I think this should be signalled on the mailing-list, by the way. I
expect everyone to agree of course :)
msg95541 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2009-11-20 13:46
Yes, checking with python-dev sounds sensible.  I'll wait until there's
a working patch, though.
msg96689 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2009-12-20 15:31
Hmm.  That's unfortunate:  for argument type in 'bBHiIlkKn', an attempt to 
pass a float results in a DeprecationWarning.  For type 'L', there's no 
DeprecationWarning, and the float is silently truncated.  So for type 'L' 
I guess we still have to go through a round of DeprecationWarning.

I'm not sure what 'h' does;  there don't appear to be any tests for it, 
currently.
msg96692 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2009-12-20 16:05
'h' also produces a DeprecationWarning;  I just added the missing tests 
for it in r76930 (trunk) and r76931 (py3k).
msg96751 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2009-12-21 13:53
Here's a patch that makes the DeprecationWarning a TypeError, and adds a 
new DeprecationWarning for the 'L' format.
msg97118 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2010-01-01 17:29
Applied to trunk in r77218.  The DeprecationWarning for the 'L' format 
needs to be merged to py3k.
msg97120 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2010-01-01 19:30
Merged relevant bits to py3k in r77220.
History
Date User Action Args
2010-01-01 19:30:02mark.dickinsonsetstatus: open -> closed
resolution: fixed
messages: + msg97120

stage: needs patch -> resolved
2010-01-01 17:29:50mark.dickinsonsetmessages: + msg97118
versions: + Python 3.2
2009-12-21 13:53:56mark.dickinsonsetfiles: + issue5080.patch
keywords: + patch
messages: + msg96751
2009-12-20 16:05:34mark.dickinsonsetmessages: + msg96692
2009-12-20 15:31:51mark.dickinsonsetmessages: + msg96689
2009-11-20 13:46:57mark.dickinsonsetmessages: + msg95541
2009-11-20 12:36:44pitrousetmessages: + msg95538
2009-11-19 17:28:33ezio.melottisetnosy: + ezio.melotti
2009-11-19 17:22:47pitrousetpriority: normal

nosy: + pitrou
messages: + msg95497

stage: needs patch
2009-11-18 21:16:49mark.dickinsonsetassignee: mark.dickinson
2009-09-20 12:27:36marcin.widersetnosy: + marcin.wider
2009-09-07 23:27:36hayposetnosy: + haypo
messages: + msg92400
2009-09-04 07:57:49georg.brandlsetnosy: + georg.brandl
messages: + msg92239
2009-01-27 12:23:56mark.dickinsoncreate