try-except
と try-finally
を1つの try
にできない¶
プログラムの中で例外が発生すると、通常それ以降のコードは呼ばれません。
それだと困る場合があるので、例外を処理するために try
文という仕組みが用意されています。
実際のコードの中では try
と except
(または try
と finally
) を組み合わせて使います。
except
節は例外が発生したときにだけ呼ばれます。
while True:
try:
x = int(raw_input("Please enter a number: "))
break
except ValueError:
print "Not a valid number. Try again..."
finally
節は例外が発生してもしなくても常に呼ばれます。
f = open("input.txt")
try:
n = 0
for line in f:
n += int(line)
print n
finally:
f.close()
Python 2.4 では、同じ try
に except
と finally
を
両方指定することができないという制限があります。
そのため以下のような書き方は構文エラーになります。
f = open(path, 'r')
try:
f.write('test')
except IOError, (errno, msg):
print 'Cannot write to %s: %s' % (path, msg)
finally:
f.close()
代わりに以下のように try
を入れ子にします。
f = open(path, 'w')
try:
try:
f.write('test')
except IOError, (errno, msg):
print 'Cannot write to %s: %s' % (path, msg)
finally:
f.close()
別にどうってことはないのですが、インデントが深くなって行数が増えた分、 ソースコードがちょっとごちゃごちゃして読みにくくなってしまいました。
Python 2.5 以降にはそんな制限はありません。