Kaydet (Commit) b646757e authored tarafından Mark Dickinson's avatar Mark Dickinson

Issue #1481296: (again!) Make conversion of a float NaN to an int or

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')).
üst ff6868cf
......@@ -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.
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment