プログラムを書いていると、何らかの問題が発生してプログラムが正常に動作しない場合があります。例えば、ファイルが見つからない、ゼロで割り算をしようとした、などがそのような例です。こうした問題を解決するために、Pythonには例外処理機能が備わっています。
例外とは
例外 (Exception) は、予期しない事象やエラーを示すオブジェクトです。Pythonでは、プログラムが実行中に発生したエラーを自動的に検出し、該当する例外オブジェクトを生成します。
例外処理の書式
Pythonにおける例外処理は、try
文とexcept
文を使って書きます。例外が発生する可能性がある箇所をtry
ブロックで囲み、例外が発生した場合に実行する処理をexcept
ブロックで指定します。以下は例外処理の書式です。
try:
# 例外が発生する可能性のある処理
except 例外の種類:
# 例外が発生した場合に実行する処理
例外の種類
Pythonには多数の例外が用意されており、以下はその一部です。
Exception
:すべての例外の基底クラスValueError
:値が不適切な場合に発生する例外TypeError
:オブジェクトの型が不適切な場合に発生する例外NameError
:定義されていない変数を参照した場合に発生する例外ZeroDivisionError
:ゼロで除算した場合に発生する例外FileNotFoundError
:ファイルが見つからなかった場合に発生する例外
例外の種類を指定しないexcept
文を使用することもできますが、この場合はすべての例外に対応することになります。
例外処理の例
以下は、ファイルを開いてその内容を読み込む際にFileNotFoundError
が発生した場合に、「ファイルが見つかりませんでした。」と表示する例です。
try:
with open('sample.txt', 'r') as f:
data = f.read()
except FileNotFoundError:
print('ファイルが見つかりませんでした。')
例外の送出
Pythonでは、プログラムの実行中に発生するエラーや異常事態を「例外」として扱います。例外が発生した場合、プログラムはその場で停止してしまうため、例外に対処するためには例外処理を行う必要があります。
例外を自分で発生させることができるため、プログラム内で特定の状況に応じて例外を発生させ、例外処理を行うことができます。このように、自分で例外を発生させることを「例外の送出」と呼びます。
例外の送出方法
例外を送出するには、raise
文を使います。raise
文は、引数として例外オブジェクトを受け取ります。例外オブジェクトには、Exception
クラスを継承して定義されたクラスや、Exception
クラスを直接継承したクラスを指定することが一般的です。
class MyException(Exception):
pass
def my_function():
# 何らかの処理
raise MyException("MyExceptionが発生しました。")
try:
my_function()
except MyException as e:
print(e)
上記の例では、MyException
という例外を自分で定義し、my_function
内で例外を発生させています。raise
文によって、MyException
のオブジェクトが作成され、それが例外として発生します。
例外を送出した後は、例外処理でキャッチする必要があります。上記の例では、try
文とexcept
文を使って、MyException
をキャッチしています。キャッチした例外オブジェクトは、as
キーワードで指定した変数に代入され、print
文で表示されます。
コメント