[Python-checkins] cpython (merge 3.4 -> default): merge

raymond.hettinger python-checkins at python.org
Tue Aug 12 21:45:38 CEST 2014


http://hg.python.org/cpython/rev/4d4a9094bdb0
changeset:   92088:4d4a9094bdb0
parent:      92086:f07b17de3b0d
parent:      92087:780693490c84
user:        Raymond Hettinger <python at rcn.com>
date:        Tue Aug 12 12:45:28 2014 -0700
summary:
  merge

files:
  Lib/functools.py           |  6 ++++++
  Lib/test/test_functools.py |  7 +++++++
  Misc/NEWS                  |  3 +++
  3 files changed, 16 insertions(+), 0 deletions(-)


diff --git a/Lib/functools.py b/Lib/functools.py
--- a/Lib/functools.py
+++ b/Lib/functools.py
@@ -392,6 +392,12 @@
     # The internals of the lru_cache are encapsulated for thread safety and
     # to allow the implementation to change (including a possible C version).
 
+    # Early detection of an erroneous call to @lru_cache without any arguments
+    # resulting in the inner function being passed to maxsize instead of an
+    # integer or None.
+    if maxsize is not None and not isinstance(maxsize, int):
+        raise TypeError('Expected maxsize to be an integer or None')
+
     # Constants shared by all lru cache instances:
     sentinel = object()          # unique object used to signal cache misses
     make_key = _make_key         # build a key from the function arguments
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -1070,6 +1070,13 @@
         self.assertEqual(test_func(DoubleEq(2)),    # Trigger a re-entrant __eq__ call
                          DoubleEq(2))               # Verify the correct return value
 
+    def test_early_detection_of_bad_call(self):
+        # Issue #22184
+        with self.assertRaises(TypeError):
+            @functools.lru_cache
+            def f():
+                pass
+
 
 class TestSingleDispatch(unittest.TestCase):
     def test_simple_overloads(self):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -118,6 +118,9 @@
 - Issue #21448: Changed FeedParser feed() to avoid O(N**2) behavior when
   parsing long line.  Original patch by Raymond Hettinger.
 
+- Issue #22184:  The functools LRU Cache decorator factory now gives an earlier
+  and clearer error message when the user forgets the required parameters.
+
 - Issue #17923: glob() patterns ending with a slash no longer match non-dirs on
   AIX.  Based on patch by Delhallt.
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list