# Example for syntax highlight with Pygments # ========================================== # # Translate this document to HTML with a pygments enhanced frontend:: # # rst2html-pygments --stylesheet=pygments-default.css # # or to LaTeX with:: # # rst2latex-pygments --stylesheet=pygments-default.sty # # to gain syntax highlight in the output. # # Convert between text <-> code source formats with:: # # pylit --code-block-marker='.. code-block:: python' # # Run the doctests with:: # # pylit --doctest for-else-test.py # # # for-else-test # ------------- # # Test the flow in a `for` loop with `else` statement. # # First define a simple `for` loop. # # .. code-block:: python def loop1(iterable): """simple for loop with `else` statement""" for i in iterable: print i else: print "iterable empty" print "Ende" # Now test it: # # The first test runs as I expect: iterator empty -> else clause applies: # # .. code-block:: pycon # # >>> execfile('for-else-test.py') # >>> loop1(range(0)) # iterable empty # Ende # # However, the else clause even runs if the iterator is not empty in the first # place but after it is "spent": # # .. code-block:: pycon # # >>> loop1(range(3)) # 0 # 1 # 2 # iterable empty # Ende # # It seems like the else clause can only be prevented, if we break out of # the loop. Let's try # # .. code-block:: python def loop2(iterable): """for loop with `break` and `else` statement""" for i in iterable: print i break else: print "iterable empty" print "Ende" # And indeed, the else clause is skipped after breaking out of the loop: # # .. code-block:: pycon # # >>> loop2(range(3)) # 0 # Ende # # The empty iterator runs as expected: # # .. code-block:: pycon # # >>> loop2(range(0)) # iterable empty # Ende #