mirror of https://github.com/python/cpython
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')).
This commit is contained in:
parent
ff6868cf10
commit
b646757e01
|
@ -745,7 +745,8 @@ class LongTest(unittest.TestCase):
|
||||||
|
|
||||||
def test_nan_inf(self):
|
def test_nan_inf(self):
|
||||||
self.assertRaises(OverflowError, long, float('inf'))
|
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():
|
def test_main():
|
||||||
test_support.run_unittest(LongTest)
|
test_support.run_unittest(LongTest)
|
||||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.6 beta 3?
|
||||||
Core and Builtins
|
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)
|
- Issue #3479: On platforms where sizeof(int) is smaller than sizeof(long)
|
||||||
(64bit Unix, for example), unichr() would truncate its argument and return
|
(64bit Unix, for example), unichr() would truncate its argument and return
|
||||||
u'\x00' for unichr(2**32). Now it properly raises an OverflowError.
|
u'\x00' for unichr(2**32). Now it properly raises an OverflowError.
|
||||||
|
|
|
@ -176,11 +176,13 @@ PyLong_FromDouble(double dval)
|
||||||
neg = 0;
|
neg = 0;
|
||||||
if (Py_IS_INFINITY(dval)) {
|
if (Py_IS_INFINITY(dval)) {
|
||||||
PyErr_SetString(PyExc_OverflowError,
|
PyErr_SetString(PyExc_OverflowError,
|
||||||
"cannot convert float infinity to long");
|
"cannot convert float infinity to integer");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (Py_IS_NAN(dval)) {
|
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) {
|
if (dval < 0.0) {
|
||||||
neg = 1;
|
neg = 1;
|
||||||
|
|
Loading…
Reference in New Issue