summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_functools.py
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2011-10-16 06:50:42 (GMT)
committerRaymond Hettinger <python@rcn.com>2011-10-16 06:50:42 (GMT)
commit4b779b3785c0014224eef95c8805f166d0ef2a86 (patch)
tree30b3372cbf7db8e7c46ece24f2811991bb44967d /Lib/test/test_functools.py
parent9be57231dd6a3b69bda09e53e5f751aafaf89b51 (diff)
downloadcpython-4b779b3785c0014224eef95c8805f166d0ef2a86.zip
cpython-4b779b3785c0014224eef95c8805f166d0ef2a86.tar.gz
cpython-4b779b3785c0014224eef95c8805f166d0ef2a86.tar.bz2
Issue 13177: Make tracebacks more readable by avoiding chained exceptions in the lru_cache.
Diffstat (limited to 'Lib/test/test_functools.py')
-rw-r--r--Lib/test/test_functools.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index 7d11b53..270cab0 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -655,6 +655,22 @@ class TestLRU(unittest.TestCase):
self.assertEqual(fib.cache_info(),
functools._CacheInfo(hits=0, misses=0, maxsize=None, currsize=0))
+ def test_lru_with_exceptions(self):
+ # Verify that user_function exceptions get passed through without
+ # creating a hard-to-read chained exception.
+ # http://bugs.python.org/issue13177
+ for maxsize in (None, 100):
+ @functools.lru_cache(maxsize)
+ def func(i):
+ return 'abc'[i]
+ self.assertEqual(func(0), 'a')
+ with self.assertRaises(IndexError) as cm:
+ func(15)
+ self.assertIsNone(cm.exception.__context__)
+ # Verify that the previous exception did not result in a cached entry
+ with self.assertRaises(IndexError):
+ func(15)
+
def test_main(verbose=None):
test_classes = (
TestPartial,