はじめに
こんにちは!今回も、備忘録を兼ねて。
プログラムを書いていると、予期せぬエラーが発生することがあります。
エラーが発生するとプログラムは処理を停止してしまいますが、エラー発生時の処理を適切に行うことで、プログラムを途中で止めずに処理を継続したり、ユーザーに分かりやすいメッセージを表示したりすることができます。
このようなエラー発生時の処理を、「例外処理」と呼びます。
今回は、例外処理の基礎から振り返ってみます。
例外処理の基本
Pythonの例外処理は、try
、except
、else
、finally
というキーワードを使って行います。基本的な構文は以下の通りです。
try:
# 例外が発生する可能性のある処理
except 例外型:
# 例外が発生した場合の処理
else:
# 例外が発生しなかった場合の処理
finally:
# 例外発生の有無に関わらず実行する処理
- tryブロック: 例外が発生する可能性のある処理を記述します。
-
exceptブロック:
try
ブロック内で指定した例外が発生した場合に実行する処理を記述します。 -
elseブロック:
try
ブロック内で例外が発生しなかった場合に実行する処理を記述します。 - finallyブロック: 例外発生の有無に関わらず必ず実行する処理を記述します。
例外処理の基本的な例
def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("エラー: 0で割ることはできません。")
else:
print(f"計算結果: {result}")
finally:
print("処理を終了します。")
divide(10, 2) # 出力: 計算結果: 5.0
# 処理を終了します。
divide(10, 0) # 出力: エラー: 0で割ることはできません。
# 処理を終了します。
複数の例外への対応
except
文は複数記述することができます。
これにより、発生する可能性のある複数の例外に対して、それぞれ異なる処理を行うことができます。
try:
# 例外が発生する可能性のある処理
except ZeroDivisionError:
# ZeroDivisionErrorが発生した場合の処理
except TypeError:
# TypeErrorが発生した場合の処理
except Exception as e:
# その他の例外が発生した場合の処理 (例外は変数eに代入)
例外の伝播
例外が発生した際に、その場で処理されなかった場合、例外は呼び出し元の関数に伝播していきます。
def func_a():
print("func_a開始")
func_b()
print("func_a終了")
def func_b():
print("func_b開始")
raise ValueError("func_bでエラー発生!")
print("func_b終了")
try:
func_a()
except ValueError as e:
print(f"エラーをキャッチ: {e}")
# 出力結果:
# func_a開始
# func_b開始
# エラーをキャッチ: func_bでエラー発生!
独自の例外クラスの定義
Exception
クラスを継承して、独自の例外クラスを定義することができます。
class MyCustomError(Exception):
def __init__(self, message):
super().__init__(message)
self.message = message
try:
raise MyCustomError("独自の例外が発生しました!")
except MyCustomError as e:
print(f"MyCustomErrorをキャッチ: {e}")
# 出力結果: MyCustomErrorをキャッチ: 独自の例外が発生しました!
実践的なエラー処理の例
ファイル操作
ファイルを開く際に、ファイルが存在しない場合などの例外処理。
外部要因に関連するものは、実装しといた方がいいです。
try:
with open("myfile.txt", "r") as f:
content = f.read()
except FileNotFoundError:
print("エラー: ファイルが見つかりません。")
ネットワーク処理
ネットワーク処理では、接続エラーやタイムアウトなど、様々なエラーが発生します。
これも問題の早期解決のため、実装しましょう。
import requests
try:
response = requests.get("https://www.example.com")
response.raise_for_status() # ステータスコードがエラーの場合に例外を発生させる
except requests.exceptions.RequestException as e:
print(f"エラー: {e}")
まとめ
今回は、Pythonの例外処理について、基礎から振り返ってみました。
例外処理は、予期せぬエラーからプログラムを守り、より安全なアプリケーションを開発するために非常に重要です。
みなさんも、今回紹介した内容を参考に、例外処理を意識したコーディングを行いましょう!