bpo-37976: Prevent shadowing of TypeError in zip() (GH-15592) (GH-15608)
(cherry picked from commit 6a650aaf7735e30636db2721247f317064c2cfd4)
Co-authored-by: Sergey Fedoseev <fedoseev.sergey@gmail.com>
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 6115579..1100c49 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -1477,6 +1477,18 @@
z1 = zip(a, b)
self.check_iter_pickle(z1, t, proto)
+ def test_zip_bad_iterable(self):
+ exception = TypeError()
+
+ class BadIterable:
+ def __iter__(self):
+ raise exception
+
+ with self.assertRaises(TypeError) as cm:
+ zip(BadIterable())
+
+ self.assertIs(cm.exception, exception)
+
def test_format(self):
# Test the basic machinery of the format() builtin. Don't test
# the specifics of the various formatters
diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py
index 573739f..98b8c83 100644
--- a/Lib/test/test_itertools.py
+++ b/Lib/test/test_itertools.py
@@ -971,6 +971,18 @@
self.pickletest(proto, zip_longest("abc", "defgh", fillvalue=1))
self.pickletest(proto, zip_longest("", "defgh"))
+ def test_zip_longest_bad_iterable(self):
+ exception = TypeError()
+
+ class BadIterable:
+ def __iter__(self):
+ raise exception
+
+ with self.assertRaises(TypeError) as cm:
+ zip_longest(BadIterable())
+
+ self.assertIs(cm.exception, exception)
+
def test_bug_7244(self):
class Repeater: