Python高座


7. 制御構造2

制御構造の2回目は例外処理である。 python には例外処理に使う try 文がある。c++ の try-catch に似たようなものだ(と思うが c++ の方を本当はよく知らない)。 try で始まる塊の中で例外が発生したばあい、その例外を捕まえて処理を行う。捕まえる例外は except に記述しておく。except は幾つも書ける(書けないと困ってしまうだろう)。以下のような形で使う。

try:
except 例外,格納変数:

else:
except 文の格納変数は、例外の値を格納するための変数であり、省略してもよい。else 塊はなくても構わない。これは他の制御構造と同じく、例外が発生しなかった時に実行される部分である。捕捉されるべき例外は、ZeroDivisionError や TypeError などである(dir(__builtins__) で確認できる)。また、後で述べる raise 文で自分で作り出した例外を使うこともできる。

もう一つの try 文の使い方として、次のものもある。
try:
finally:
こちらは、try 塊中で例外が発生すると、finally 塊を実行してからこの構文の外に例外を投げる。except と finally を同じ一つの try 塊に続けることはできない。


例外を、意図的に発生させることもできる。それが raise 文である。
raise 例外, 値
と書けば、好きな例外で好きな値を返すことができる。ここで例外として与えられるのは、文字列(かクラスかその実体)だけである。値にはそういう制限はない。使い方としては、try 文の中で例外を発生させて制御を好きなところに移す、などが考えられる。

使用例を示しておく。

>>> MyError='myerror'
>>> try:
...  print 'Emerson'
...  try:
...   raise MyError, 'Palmer!'
...  finally:
...   print 'Lake'
... except MyError,val:
...  print '&',val
...

Emerson
Lake
& Palmer!


目次索引