]> granicus.if.org Git - python/commitdiff
Issue #1481296: (again!) Make conversion of a float NaN to an int or
authorMark Dickinson <dickinsm@gmail.com>
Mon, 4 Aug 2008 21:30:09 +0000 (21:30 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Mon, 4 Aug 2008 21:30:09 +0000 (21:30 +0000)
long raise ValueError instead of returning 0.  Also, change the error
message for conversion of an infinity to an integer, replacing 'long' by
'integer', so that it's appropriate for both long(float('inf')) and
int(float('inf')).

Lib/test/test_long.py
Misc/NEWS
Objects/longobject.c

index b67c764ad50b1996a81f3ad00cef8f24e3659bf2..e53fd058cf36953d4a410d1586fc632d30e3da2c 100644 (file)
@@ -745,7 +745,8 @@ class LongTest(unittest.TestCase):
 
     def test_nan_inf(self):
         self.assertRaises(OverflowError, long, float('inf'))
-        self.assertEqual(long(float('nan')), 0L)
+        self.assertRaises(OverflowError, long, float('-inf'))
+        self.assertRaises(ValueError, long, float('nan'))
 
 def test_main():
     test_support.run_unittest(LongTest)
index 950d9cb7df429def85713fe04f7b2e3c9998cd1b..e02aca4c11f8081235f5c6189c9f42c58ebdcfd1 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.6 beta 3?
 Core and Builtins
 -----------------
 
+- Issue #1481296: Make long(float('nan')) and int(float('nan')) raise
+  ValueError consistently across platforms.
+
 - Issue #3479: On platforms where sizeof(int) is smaller than sizeof(long)
   (64bit Unix, for example), unichr() would truncate its argument and return
   u'\x00' for unichr(2**32). Now it properly raises an OverflowError.
index 228376a9dfb9ed438919a3a5a932c07babd54dd3..65130696d406e4635e1a2527d23ba0ff857b3b7b 100644 (file)
@@ -176,11 +176,13 @@ PyLong_FromDouble(double dval)
        neg = 0;
        if (Py_IS_INFINITY(dval)) {
                PyErr_SetString(PyExc_OverflowError,
-                       "cannot convert float infinity to long");
+                       "cannot convert float infinity to integer");
                return NULL;
        }
        if (Py_IS_NAN(dval)) {
-               return PyLong_FromLong(0L);
+               PyErr_SetString(PyExc_ValueError,
+                       "cannot convert float NaN to integer");
+               return NULL;
        }
        if (dval < 0.0) {
                neg = 1;