for: else: - any practical uses for the else clause?

Paul Rubin http
Fri Sep 29 18:59:40 EDT 2006


Matthew Woodcraft <mattheww at chiark.greenend.org.uk> writes:
> How do you transform this?
> 
> height = 0
> for block in stack:
>     if block.is_marked():
>         print "Lowest marked block is at height", height
>         break
>     height += block.height
> else:
>     raise SomeError("No marked block")

Untested:

    all_heights = [block.height for block in stack if block.is_marked()]
    if all_heights:
      height = sum(all_heights)
    else:
      raise SomeError("No marked block")

Alternatively (lower memory usage for large list):

    all_heights = (block.height for block in stack if block.is_marked())
    try:
      height = all_heights.next()
      height += sum(all_heights)
    except StopIteration:
      raise SomeError("No marked block")



More information about the Python-list mailing list