Python - 例外の発生
こんにちは、Pythonを志す皆さん!今日は、Pythonで例外を発生させる魅力的な世界に飛び込んでいきましょう。プログラミングが初めての方でも心配しないでください — 私はこれらの年月の間に無数の生徒を手引きしてきたように、この概念をステップバイステップに説明します。それでは、お好きな飲み物を片手に、一緒にこのPythonの冒険に出発しましょう!
Pythonで例外の発生
美味しい料理を作っている最中に、突然、重要な材料が切れていることに気づきます。どうしますか?おそらく料理を中止して、問題を皆に知らせるでしょうね?それは、まさにPythonで例外を発生させることのようです — コード内で予期しないまたは問題のあることが発生したことをシグナルする方法です。
なぜ例外を発生させるのか?
例外を発生させることで、以下のことができます:
- エラーや異常な状況を示す
- プログラムのフローを制御する
- ユーザーやコードの他の部分に意味のあるフィードバックを提供する
以下に簡単な例を示します:
def divide(a, b):
if b == 0:
raise ValueError("ゼロには割れません!")
return a / b
try:
result = divide(10, 0)
except ValueError as e:
print(f"おっと!エラーが発生しました:{e}")
この例では、ゼロに割ろうとするとValueError
を発生させています。それを分解してみましょう:
-
divide(a, b)
関数を定義し、b
がゼロかどうかを確認します。 -
b
がゼロなら、カスタムメッセージ付きのValueError
を発生させます。 - 例外をキャッチし、親切なメッセージを表示するために
try-except
ブロックを使用します。
このコードを実行すると、以下のように表示されます:
おっと!エラーが発生しました:ゼロには割れません!
内蔵例外の発生
Pythonには、発生させることができるさまざまな内蔵例外があります。以下に一般的なものの一部を表に示します:
例外名 | 説明 |
---|---|
ValueError | 関数が正しい型の引数を受け取るが、適切でない値を受け取った場合に発生 |
TypeError | 関数や操作が適切でない型のオブジェクトに適用された場合に発生 |
IndexError | シーケンスのインデックスが範囲外の場合に発生 |
KeyError | 辞書のキーが見つからない場合に発生 |
FileNotFoundError | ファイルやディレクトリが要求されたが存在しない場合に発生 |
以下にいくつかの例を示します:
def check_age(age):
if not isinstance(age, int):
raise TypeError("年齢は整数でなければなりません")
if age < 0:
raise ValueError("年齢は負数にできません")
print(f"あなたの年齢は{age}です")
try:
check_age("二十")
except TypeError as e:
print(f"型エラー: {e}")
try:
check_age(-5)
except ValueError as e:
print(f"値エラー: {e}")
このコードを実行すると、以下のように表示されます:
型エラー: 年齢は整数でなければなりません
値エラー: 年齢は負数にできません
カスタム例外の発生
時々、内蔵例外では十分ではない場合があります。そんなときには、私たちが独自のカスタム例外を作成します!それは、料理人が独自のレシピを作るのに似ています。
カスタム例外の作成
カスタム例外を作るには、Exception
クラスを継承する新しいクラスを定義するだけです:
class TooManyPizzasError(Exception):
pass
def order_pizza(number):
if number > 100:
raise TooManyPizzasError("ワーオ!それは扱えないほど多いピザです!")
print(f"注文確認: {number}個のピザ")
try:
order_pizza(101)
except TooManyPizzasError as e:
print(f"注文失敗: {e}")
この美味しい例では:
- カスタム例外
TooManyPizzasError
を定義します。 -
order_pizza
関数は、誰かが100個以上のピザを注文するとこの例外を発生させます。 - 例外をキャッチし、親切なメッセージを表示します。
このコードを実行すると、以下のように表示されます:
注文失敗: ワーオ!それは扱えないほど多いピザです!
例外の再発生
時々、例外をキャッチして何かを行った後、他の方に処理を任せるために再発生させたい場合があります。それは、ゲームで熱いポテトを持ち渡るようなものです!
以下にその方法を示します:
def risky_operation():
print("危険な操作を開始します...")
raise ValueError("何かが間違っています!")
def perform_operation():
try:
risky_operation()
except ValueError:
print("エラーをキャッチしました、ログを取ります...")
raise # 例外を再発生させる
try:
perform_operation()
except ValueError as e:
print(f"操作失敗: {e}")
この例では:
-
risky_operation()
は常にValueError
を発生させます。 -
perform_operation()
は例外をキャッチし、ログを取り、再発生させます。 - 外側の
try-except
ブロックで再発生させた例外をキャッチします。
このコードを実行すると、以下のように表示されます:
危険な操作を開始します...
エラーをキャッチしました、ログを取ります...
操作失敗: 何かが間違っています!
それでは、皆さん!例外の発生、内蔵例外、カスタム例外、そして再発生についてカバーしました。例外は敵ではなく、堅牢でエラーに強いコードを書くための価値のあるツールであることを覚えておいてください。
私がいつも生徒に言うように、コーディングは自転車を乗ることに似ています。いくつか落ちるかもしれませんが、それぞれの落ちる(または例外)は新しいことを教えてくれます。実践し続け、好奇心を持ち続け、例外を発生させることを恐れないでください!
快適なコーディングをお楽しみください、そしてあなたの例外は常に意図的であることを願っています! ?✨
Credits: Image by storyset