next()
should be wrapped in try-except
511 if len(deduped) == 3:
512 break
513 self.assertEqual(deduped, [1, 3, 2])
514 last = next(gen2) 515 self.assertEqual(last, 4)
516 with self.assertRaises(StopIteration):
517 next(gen2)
next()
should be wrapped in try-except
483 deduper = filter_unique(self.decs, container=deduped, key=id)
484 self.assertIsEmpty(deduped)
485 for _ in self.decs:
486 self.assertEqual(id(next(deduper)), deduped.pop()) 487 with self.assertRaises(StopIteration):
488 next(deduper)
489 # len(Decimal with distinct ids) != len(Decimal with distinct value).
next()
should be wrapped in try-except
423 self.assertEqual(deduped, {key('1'), key('3')})
424
425 self.assertEqual(next(deduper), '2')
426 self.assertEqual(next(deduper), '4') 427
428 if key in (hash, passthrough):
429 if isinstance(deduped, Mapping):
next()
should be wrapped in try-except
422 else:
423 self.assertEqual(deduped, {key('1'), key('3')})
424
425 self.assertEqual(next(deduper), '2') 426 self.assertEqual(next(deduper), '4')
427
428 if key in (hash, passthrough):
next()
should be wrapped in try-except
414 self.assertIsEmpty(deduped)
415
416 self.assertEqual(next(deduper), '1')
417 self.assertEqual(next(deduper), '3') 418
419 if key in (hash, passthrough):
420 if isinstance(deduped, Mapping):
Calls to next()
should be inside try-except
block.
When the iterator is exhausted, StopIteration
exception is raised. When used inside a generator, this can cause unexpected behavior. If not handled, it will propagate out of the generator causing termination. PEP-479 has been accepted to fix this problem. It will modify the behavior of StopIteration
in generators.
Each call to next()
should be wrapped in a try-except
block to explicitly handle StopIteration
exceptions.
def get_team_structure(team):
for team in class:
students = iter(team)
# StopIteration exception will be raised if team doesn't have members.
leader = next(students)
members = [m for m in students]
yield leader, members
def print_teams(teams):
for leader, members in get_team_structure(teams):
print("Leader: "leader)
for member in members:
print(member)
def get_team_structure(team):
for team in class:
# StopIteration exception will be raised if team has no members.
students = iter(team)
# Added `try` block, to guard against the exception
try:
leader = next(students)
except StopIteration:
# team has no members, skip it
continue
members = [m for m in students]
yield leader, members
def print_teams(teams):
for leader, members in get_team_structure(teams):
print("Leader: "leader)
for member in members:
print(member)
...