例外処理 その2

try文はelse節を持つことができます。else節はtry節の中で例外が発生しなかった場合に実行されます。

>>> while True:
...     try:
...         file = open(raw_input("ファイル名: "))
...     except IOError:
...         print "ファイルが見つかりません"
...     else:
...         for i in xrange(5):
...             print i + 1, file.readline(),
...         break
...
ファイル名: C:\Python25\Lib\aifc.p
ファイルが見つかりません
ファイル名: C:\Python25\Lib\aifc.py
1 """Stuff to parse AIFF-C and AIFF files.
2
3 Unless explicitly stated otherwise, the description below is true
4 both for AIFF-C files and AIFF files.
5

一応、else節を使ったコードを書いてはみたのですが、いまいちありがたみがわかりません。例外を起こすかもしれない処理とそうでない処理を明確にわけることができる、というのがいいんでしょうか。



例外の有無にかかわらず実行したい処理はfinally節に記述します。

>>> while True:
...     try:
...         n = int(raw_input("数字: "))
...         print n
...         break
...     except ValueError, inst:
...         print inst
...     finally:
...         print "finish"
...
数字: g
invalid literal for int() with base 10: 'g'
finish
数字: 8
8
finish

finally節はbreak文でループを抜ける時にも実行されます。