[Python-checkins] cpython (3.5): Issue 27936: Fix inconsistent round() behavior between float and int
raymond.hettinger
python-checkins at python.org
Sat Sep 3 05:18:43 EDT 2016
https://hg.python.org/cpython/rev/c3c4d8e4ca1a
changeset: 103012:c3c4d8e4ca1a
branch: 3.5
parent: 103006:a7ce98a4e9e4
user: Raymond Hettinger <python at rcn.com>
date: Sat Sep 03 01:55:11 2016 -0700
summary:
Issue 27936: Fix inconsistent round() behavior between float and int
files:
Lib/test/test_builtin.py | 11 +++++++++++
Lib/test/test_long.py | 2 +-
Misc/NEWS | 4 ++++
Python/bltinmodule.c | 2 +-
4 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -3,6 +3,8 @@
import ast
import builtins
import collections
+import decimal
+import fractions
import io
import locale
import os
@@ -1244,6 +1246,15 @@
self.assertEqual(round(5e15+2), 5e15+2)
self.assertEqual(round(5e15+3), 5e15+3)
+ def test_bug_27936(self):
+ # Verify that ndigits=None means the same as passing in no argument
+ for x in [1234,
+ 1234.56,
+ decimal.Decimal('1234.56'),
+ fractions.Fraction(123456, 100)]:
+ self.assertEqual(round(x, None), round(x))
+ self.assertEqual(type(round(x, None)), type(round(x)))
+
def test_setattr(self):
setattr(sys, 'spam', 1)
self.assertEqual(sys.spam, 1)
diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py
--- a/Lib/test/test_long.py
+++ b/Lib/test/test_long.py
@@ -967,7 +967,7 @@
self.assertIs(type(got), int)
# bad second argument
- bad_exponents = ('brian', 2.0, 0j, None)
+ bad_exponents = ('brian', 2.0, 0j)
for e in bad_exponents:
self.assertRaises(TypeError, round, 3, e)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -18,6 +18,10 @@
``m_methods`` field to be used to add module level functions to instances
of non-module types returned from ``Py_create_mod``. Patch by Xiang Zhang.
+- Issue #27936: The round() function accepted a second None argument
+ for some types but not for others. Fixed the inconsistency by
+ accepting None for all numeric types.
+
- Issue #27487: Warn if a submodule argument to "python -m" or
runpy.run_module() is found in sys.modules after parent packages are
imported, but before the submodule is executed.
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -2039,7 +2039,7 @@
return NULL;
}
- if (ndigits == NULL)
+ if (ndigits == NULL || ndigits == Py_None)
result = PyObject_CallFunctionObjArgs(round, NULL);
else
result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list