else
ブロックは正常終了時に実行されるブロックのため、C/C++/C#の finally ブロックとは動作が異なります。Pythonで例外をキャッチするコードを紹介します。
Pythonで例外をキャッチするには、try
except
句を利用します。
try:
(処理)
...
(処理)
except [例外クラス]:
(例外発生時の処理)
...
(例外発生時の処理)
複数の例外をキャッチすることもできます。
try:
(処理)
except [例外クラス1]:
(例外発生時の処理)
except [例外クラス2]:
(例外発生時の処理)
...
except [例外クラスn]:
(例外発生時の処理)
例外オブジェクトにアクセスする場合は以下の書式を利用します。
try:
(処理)
...
(処理)
except [例外クラス] as [例外オブジェクトの変数名]:
(例外発生時の処理)
...
(例外発生時の処理)
try:
(処理)
...
(処理)
except [例外クラス1] as [例外オブジェクトの変数名]:
(例外発生時の処理)
except [例外クラス2] as [例外オブジェクトの変数名]:
(例外発生時の処理)
...
except [例外クラスn] as [例外オブジェクトの変数名]:
(例外発生時の処理)
正常終了時に実行させる処理をelse
に記述できます。
try:
(処理)
except [例外クラス]:
(例外発生時の処理)
else:
(正常終了時の処理)
else
ブロックは正常終了時に実行されるブロックのため、C/C++/C#の finally ブロックとは動作が異なります。0除算の例外をキャッチするコードを紹介します。
try:
value = 100 / 0
except ZeroDivisionError:
print("例外:0で除算しました。")
print("プログラム終了")
tryブロック内で0による除算を実行しており、例外が発生します。
try:
value = 100 / 0
発生した0による除算の例外は、ZeroDivisionError
でキャッチします。"例外:0で除算しました。"を出力します。
except ZeroDivisionError:
print("例外:0で除算しました。")
プログラムを実行すると下図の結果となります。"例外:0で除算しました。"のメッセージが画面に表示されます。
なお、0による除算が発生しないコードの場合は、以下の結果となり、例外のメッセージは表示されません。
try:
value = 100 / 5
except ZeroDivisionError:
print("例外:0で除算しました。")
print("プログラム終了")
例外オブジェクトを参照する例です。
以下のコードを記述します。
try:
text_file = open("sample.txt", "rt")
for line in text_file:
print (line.strip())
except FileNotFoundError as e:
print("例外:",e)
print("エラーメッセージ:",e.strerror)
print("ファイル:",e.filename)
print("type",type(e))
print("プログラム終了")
sample.txt ファイルを開き、1行づつ読み込み画面に表示します。
今回はsample.txtファイルを配置せずに、ファイルが見つからない例外(FileNotFoundError)を発生させます。
try:
text_file = open("sample.txt", "rt")
for line in text_file:
print (line.strip())
FileNotFoundError の例外をキャッチし、例外オブジェクトの値、例外オブジェクトのタイプを出力します。
except FileNotFoundError as e:
print("例外:",e)
print("type",type(e))
プログラムを実行します。下図の結果となります。例外オブジェクトのメッセージが表示できました。