mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
bpo-40824: Do not mask errors in __iter__ in "in" and the operator module. (GH-20537)
Unexpected errors in calling the __iter__ method are no longer
masked by TypeError in the "in" operator and functions
operator.contains(), operator.indexOf() and operator.countOf().
(cherry picked from commit cafe1b6e9d
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
f19ed6b0c7
commit
353c4bab7d
4 changed files with 21 additions and 1 deletions
|
@ -76,6 +76,10 @@ class NoIterClass:
|
|||
return i
|
||||
__iter__ = None
|
||||
|
||||
class BadIterableClass:
|
||||
def __iter__(self):
|
||||
raise ZeroDivisionError
|
||||
|
||||
# Main test suite
|
||||
|
||||
class TestCase(unittest.TestCase):
|
||||
|
@ -658,6 +662,7 @@ class TestCase(unittest.TestCase):
|
|||
|
||||
self.assertRaises(TypeError, lambda: 3 in 12)
|
||||
self.assertRaises(TypeError, lambda: 3 not in map)
|
||||
self.assertRaises(ZeroDivisionError, lambda: 3 in BadIterableClass())
|
||||
|
||||
d = {"one": 1, "two": 2, "three": 3, 1j: 2j}
|
||||
for k in d:
|
||||
|
@ -740,6 +745,7 @@ class TestCase(unittest.TestCase):
|
|||
|
||||
self.assertRaises(TypeError, indexOf, 42, 1)
|
||||
self.assertRaises(TypeError, indexOf, indexOf, indexOf)
|
||||
self.assertRaises(ZeroDivisionError, indexOf, BadIterableClass(), 1)
|
||||
|
||||
f = open(TESTFN, "w")
|
||||
try:
|
||||
|
@ -1027,6 +1033,7 @@ class TestCase(unittest.TestCase):
|
|||
def test_error_iter(self):
|
||||
for typ in (DefaultIterClass, NoIterClass):
|
||||
self.assertRaises(TypeError, iter, typ())
|
||||
self.assertRaises(ZeroDivisionError, iter, BadIterableClass())
|
||||
|
||||
|
||||
def test_main():
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue