diff options
-rw-r--r-- | Lib/test/test_long.py | 3 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Objects/longobject.c | 6 |
3 files changed, 9 insertions, 3 deletions
diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py index b67c764..e53fd05 100644 --- a/Lib/test/test_long.py +++ b/Lib/test/test_long.py @@ -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) @@ -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. diff --git a/Objects/longobject.c b/Objects/longobject.c index 228376a..6513069 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -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; |