Python での例外の発生

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

魔法のコーディングの名門校、「不思議なコーディングアカデミー」へようこそ。ここには、最も能力の高いコーディング奇才たちが集まり、技術を磨いています。あなたは最近このアカデミーに入った若き奇才で、魔法的なアルゴリズムや複雑な呪文の、常に挑戦的な世界に入り込んだばかりです。

あなたの旅は、魔法の世界中で知られる卓越した問題解決能力と膨大な Python 魔法の知識で有名な、著名なコンピティティブ・スペルキャスティングコーチであるマスター・ピソの指導の下で始まります。アカデミーでは、すべての奇才が呪文を唱える技術を学ばなければなりませんが、本当に強力な奇才になるためには、予期せぬことを予測し管理する能力が必要です。

今日、マスター・ピソはあなたに例外を発生させるという古代の技術を教えます。これは、有望な奇才にとって基本的な技術であり、魔法(コード)の流れを制御し、呪文を唱える際(プログラミング中)に起こり得る予期せぬエラーに対するセーフガードを作成することができます。

この実験の目的は、適切に例外を処理して発生させることができる堅牢な Python コードを書く力をあなたに与えることで、あなたの呪文(プログラム)が強力であるだけでなく、強靭で安全であることを保証することです。用意してください。なぜなら、あなたは Python 例外処理の不思議な世界を通る魔法の旅に出発するからです!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") subgraph Lab Skills python/raising_exceptions -.-> lab-271583{{"Python での例外の発生"}} end

例外の基本を理解する

このステップでは、Python における例外の基本について学びます。Python における例外は、呪文の唱え方の流れを乱す予期せぬイベントのようなものです。Python がエラーに遭遇すると、現在の処理を停止し、コールスタックに沿ってそれを渡していき、処理されるまで続けます。処理されなければ、呪文(プログラム)はクラッシュし、Python はエラーメッセージを表示します。

例外が発生するシナリオをシミュレートするために、うまくいかない呪文を唱えようとする(除算を実行する)簡単な Python スクリプトを作成します。

~/project ディレクトリに、以下の内容で spellcasting.py という名前のファイルを開きます。

## spellcasting.py

def divide_potions(potions, wizards):
    return potions / wizards

## ゼロ人の奇才にポーションを分配しようとすると、例外が発生します。
divide_potions(10, 0)

以下のコマンドを使用して、呪文の唱え方のスクリプトを実行します。

python3 ~/project/spellcasting.py

Python が ZeroDivisionError を発生させることに気付きます。次のステップでは、この例外を適切に処理する方法を学びます。

Traceback (most recent call last):
  File "/home/labex/project/spellcasting.py", line 7, in <module>
    divide_potions(10, 0)
  File "/home/labex/project/spellcasting.py", line 4, in divide_potions
    return potions / wizards
ZeroDivisionError: division by zero

カスタム例外の発生

もう少し高度な呪文の唱え方の技術に移りましょう。それは、独自の例外を発生させることです。これにより、独自のエラーメッセージを作成して使用できるようになり、呪文をより柔軟で制御可能にすることができます。

このステップでは、divide_potions 関数に不正な数の奇才が渡された場合に、独自の Exception を発生させるように spellcasting.py スクリプトを修正します。

まず、spellcasting.pydivid_potions 関数を次のように修正します。

## spellcasting.py

def divide_potions(potions, wizards):
    if wizards == 0:
        raise Exception("Cannot divide potions among zero wizards!")
    return potions / wizards

## 意図的なエラーでポーションを再分割しようとします。
divide_potions(20, 0)

変更を保存した後、修正したスクリプトを再度実行します。

python3 ~/project/spellcasting.py

今回は、Python がカスタムの Exception メッセージを発生させます。

Traceback (most recent call last):
  File "/home/labex/project/spellcasting.py", line 7, in <module>
    divide_potions(20, 0)
  File "/home/labex/project/spellcasting.py", line 3, in divide_potions
    raise Exception("Cannot divide potions among zero wizards!")
Exception: Cannot divide potions among zero wizards!

try-except を使った例外処理

このステップでは、try-except ブロックを使って例外を上手に処理する方法を学びます。呪文(プログラム)がエラーから回復できるようにすることは、奇才にとって重要なスキルです。

spellcasting.py スクリプトの divide_potions 関数呼び出しの周りに try-except ブロックを追加します。

## spellcasting.py

def divide_potions(potions, wizards):
    if wizards == 0:
        raise Exception("Cannot divide potions among zero wizards!")
    return potions / wizards

try:
    ## ポーションを分割して、潜在的なエラーを処理します。
    result = divide_potions(30, 0)
    print(f"Each wizard receives {result} potions.")
except Exception as e:
    print(f"Spell failed: {e}")

シェルでこれを実行します。

python3 ~/project/spellcasting.py

今、スクリプトを実行すると、クラッシュする代わりに、次の出力が表示されます。

Spell failed: Cannot divide potions among zero wizards!

まとめ

この実験では、Python 例外処理の魅力的な世界を探索しました。まず、例外の紹介として自然に発生させることから始め、次に独自の例外とメッセージを作成する方法を学び、最後に呪文(プログラム)を破ることなくこれらの例外を処理する技術で締めくくりました。

あなたは今、Python における例外の発生と処理の基本をマスターしました。この技術は、コーディング奇才としてのあなたの旅において、確かに役立つでしょう。これは、プログラムの堅牢性とユーザーフレンドリネスに貢献するだけでなく、予期せぬ動作を予測し対策することを教えてくれます。呪文を完全なものに保ち、奇才としてのあなたの実力を強力なものに維持します。

若き魔法使いよ、コードがあなたと共にありますように。