例外をキャッチする

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 ブロックとは動作が異なります。

例1

0除算の例外をキャッチするコードを紹介します。

コード

try:
  value = 100 / 0
except ZeroDivisionError:
  print("例外:0で除算しました。")

print("プログラム終了")

解説

tryブロック内で0による除算を実行しており、例外が発生します。

try:
  value = 100 / 0


発生した0による除算の例外は、ZeroDivisionError でキャッチします。"例外:0で除算しました。"を出力します。

except ZeroDivisionError:
  print("例外:0で除算しました。")

実行結果

プログラムを実行すると下図の結果となります。"例外:0で除算しました。"のメッセージが画面に表示されます。
例外をキャッチする:画像1


なお、0による除算が発生しないコードの場合は、以下の結果となり、例外のメッセージは表示されません。

try:
  value = 100 / 5
except ZeroDivisionError:
  print("例外:0で除算しました。")

print("プログラム終了")

例外をキャッチする:画像2

例2: 例外オブジェクトを参照する

例外オブジェクトを参照する例です。

コード

以下のコードを記述します。

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))

実行結果

プログラムを実行します。下図の結果となります。例外オブジェクトのメッセージが表示できました。
例外をキャッチする:画像3

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2023-04-10
Copyright © 1995–2025 iPentec all rights reserverd.