Python 速習チュートリアル

Python Try Except

1. Python 例外処理 (Try...Except)

try ブロックを使用すると、コードブロック内でエラーが発生するかどうかをテストできます。

except ブロックを使用すると、発生したエラーをハンドリング(処理)できます。

else ブロックを使用すると、エラーが発生しなかった場合にのみコードを実行できます。

finally ブロックを使用すると、try および except ブロックの結果に関わらず、コードを実行できます。

2. 例外のハンドリング

エラーが発生した場合、通常 Python は実行を停止し、エラーメッセージを生成します。これを「例外をスローする(throwing an exception)」と呼びます。

これらの例外は try ステートメントを使用して処理できます。

1.1 コード例

x が定義されていない場合、try ブロックはエラーを生成し、except ブロックが実行されます。

try:
  print(x)
except:
  print("例外が発生しました")

try ブロックがない場合、変数が定義されていないとプログラムはクラッシュし、エラーをスローします。

1.2 コード例(tryなし)

このコードはエラーを引き起こします。

print(x)

3. 複数の例外

必要な数だけ例外ブロック(except ブロック)を定義できます。例えば、特定の種類の例外に対して特別な処理を実行したい場合などです。

2.1 コード例

NameError 用の特別なメッセージを出力し、それ以外のエラーには別のメッセージを出力します。

try:
  print(x)
except NameError:
  print("変数 x が定義されていません")
except:
  print("それ以外の何らかのエラーが発生しました")

4. Else

else キーワードを使用すると、エラーが発生しなかった場合に実行するコードブロックを定義できます。

3.1 コード例

この例では、try ブロック内でエラーが発生しなかったため、else ブロックが実行されます。

try:
  print("Hello")
except:
  print("エラーが発生しました")
else:
  print("何もエラーは発生しませんでした")

5. Finally

finally ブロックは、try ブロックでエラーが発生したかどうかにかかわらず実行されます。

4.1 コード例

try:
  print(x)
except:
  print("例外が発生しました")
finally:
  print("'try...except' 処理が完了しました")

これは、開いているファイルやオブジェクト(データベースコネクションなど)をクリーンアップして閉じる際に非常に役立ちます。

4.2 コード例

書き込み権限のないファイルを書き込みモードで開こうとした場合でも、最後にファイルを閉じようとする処理を記述できます。

try:
  f = open("demofile.txt")
  try:
    f.write("Lorum Ipsum")
  except:
    print("ファイルへの書き込み中に問題が発生しました")
  finally:
    f.close()
except:
  print("ファイルを開く際に問題が発生しました")

この場合、ファイルへの書き込みに失敗しても、プログラムは続行され、ファイルオブジェクトは適切に閉じられます。

6. 例外を発生させる (Raise)

Python 開発者は、特定の条件が発生した場合に例外をスロー(発生)させることを選択できます。

例外をスローするには、raise キーワードを使用します。

5.1 コード例

変数が 0 未満の場合にエラーを発生させ、プログラムを停止させます。

x = -1

if x < 0:
  raise Exception("申し訳ありませんが、数値は0より大きくある必要があります")

raise キーワードは、発生させる例外の種類を指定するために使用され、ユーザーに表示するテキストを定義することもできます。

5.2 コード例

x が整数でない場合に TypeError を発生させます。

x = "hello"

if not type(x) is int:
  raise TypeError("整数のみが許可されています")