for-else, try-else 構文

この記事は Python Tips Advent Calendar 2012 7日目の記事です。


Python の for や try 文では、else 節を含めることができます。

>>> def find(xs, v):
...     for x in xs:
...         if x == v:
...             print 'found'
...             break
...     else:
...         print 'not found'
>>> find([1,2,3], 2)
found
>>> find([1,2,3], 5)
not found

for の場合は、その中で break や return されず、最後までループした場合に else 節が処理されます。

>>> def foo(f):
...     try:
...         f()
...     except Exception, e:
...         print 'except'
...     else:
...         print 'else'
...     finally:
...         print 'finally'
>>> foo(lambda: 0)
else
finally
>>> foo(lambda: 1/0)
except
finally

try の場合は except の逆になります。つまり try 文の中で例外が投げられなかった場合のみ呼ばれます。


.