Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのtry-except入門!例外処理の基本と実践例をわかりやすく解説

はじめに

このチュートリアルでは、Pythonにおけるtryexceptの使い方について学びます。Pythonにはエラーと例外処理という仕組みが用意されており、その中核を担うのがtryキーワードとexceptキーワードです。

Pythonで発生するエラーには、主に次の2種類があります。

  • 構文エラー(Syntax Error): プログラム内のコードをPythonが解釈できない場合に発生するエラーです。
  • 例外エラー(Exception Error): プログラムの実行時に検出されるエラーです。例として、ZeroDivisionErrorやValueErrorなどが挙げられます。

構文エラーは事前に防ぐことができませんが、try-exceptを使えば、プログラムが例外エラーに遭遇した際の挙動を制御できます。まずは、Pythonでよく発生する代表的な例外を見ていきましょう。

  • ZeroDivisionError: 数値をゼロ(0)で割ろうとしたときに発生します。
  • ValueError: 関数に不適切な値を渡したときに発生します。
  • IndexError: 存在しないインデックスにアクセスしようとしたときに発生します。
  • KeyError: 辞書に存在しないキーにアクセスしようとしたときに発生します。
  • ImportError: 存在しないモジュールをインポートしようとしたときに発生します。
  • IOError: ファイルを開けないときに発生します。
  • KeyboardInterrupt: ユーザーが中断操作などのキーを押したときに発生します。

Pythonには他にも多くの例外が存在しますが、これらはtry-exceptを使えば簡単にハンドリングできます。まずは、try-exceptの基本構文を確認しましょう。

# try-exceptの構文
try:
    # 通常の処理
    # 通常の処理
    # ...
except:
    # 例外発生時の処理
    # 例外発生時の処理
    # ...

try-exceptブロックの実行フロー

Pythonがtry-exceptブロックをどのような順序で実行するのか、ステップごとに見てみましょう。

  • まず、Pythonはtryブロック内のコードを実行します。
  • コード内で例外エラーが発生しなければ、exceptブロックは実行されません。
  • 例外エラーが発生した場合は、tryブロックの残りの処理がスキップされ、exceptブロックのコードが実行されます。
  • 発生した例外エラーexceptブロックがハンドリングできない場合、その例外はそのまま送出(raise)されます。
  • 1つのtryブロックに対して、複数のexcept文を記述することも可能です。

例1: 例外が発生しないケース

まずは、例外エラーが一切発生しない例から見てみましょう。

# 例外が発生しない例
try:
    arr = [1, 2, 3, 4, 5]
    # 有効なインデックスでリストの要素にアクセス
    two = arr[1]
    print(f"エラーは発生しませんでした {two}")
except IndexError:
    print("指定されたインデックスは無効です")

出力結果

上記のプログラムを実行すると、次の結果が得られます。

エラーは発生しませんでした 2

例外エラーが発生しなかったため、tryブロック内のコードがそのまま実行されました。

例2: 無効なインデックスを指定したケース

次に、同じコードで無効なインデックスを指定した場合の挙動を確認しましょう。

# 無効なインデックスを指定した例
try:
    arr = [1, 2, 3, 4, 5]
    # 無効なインデックスでリストの要素にアクセス
    six = arr[6]
    print(f"エラーは発生しませんでした {six}")
except IndexError:
    print("指定されたインデックスは無効です")

出力結果

上記のコードを実行すると、次の結果が得られます。

指定されたインデックスは無効です

tryブロック内でIndexErrorが発生したため、代わりにexceptブロック内のコードが実行されました。

例3: exceptで捕捉できない例外の場合

続いて、exceptブロックが例外をハンドリングできない場合に何が起こるのかを見てみましょう。

# exceptで捕捉できない例外の例
try:
    arr = [1, 2, 3, 4, 5]
    # 無効なインデックスでリストの要素にアクセス
    six = arr[6]
    print(f"エラーは発生しませんでした {six}")
except ValueError:
    print("指定されたインデックスは無効です")

出力結果

上記のコードを実行すると、次の結果が得られます。

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-11-fe3737d0615b> in <module>
      3     arr = [1, 2, 3, 4, 5]
      4     # 無効なインデックスでリストの要素にアクセス
----> 5     six = arr[6]
      6     print(f"エラーは発生しませんでした {six}")
      7 except ValueError:
IndexError: list index out of range

このようにエラーが発生しました。exceptブロックにはValueErrorを指定していましたが、実際に発生したのはIndexErrorであり、これはexceptブロックでは捕捉できません。そのため、エラーがそのまま送出されてしまったのです。exceptブロックで例外を指定する際は、どの例外が発生しうるのかを注意深く見極めることが重要です。

まとめ

本記事では、Pythonのtry-exceptによる例外処理の基本を学びました。適切な例外処理を記述することで、予期しないエラーが発生してもプログラムを安全に動作させることができます。チュートリアルに関する質問がある場合は、コメント欄でお気軽にお尋ねください。

  1. Pythonによるデータ分析と可視化入門!pandas・matplotlibの使い方を解説

    このチュートリアルでは、Pythonのpandasやmatplotlibなどのモジュールを使ったデータ分析と可視化の方法を学びます。Pythonはデータ分析に非常によく適した言語です。まずは以下のコマンドでpandasとmatplotlibをインストールしましょう。 pip install pandas pip install matplotlib インストールが完了すると成功メッセージが表示されます。まずpandasについて学び、その後でmatplotlibを見ていきましょう。 pandasとは pandasはPythonのオープンソースライブラリで、データ分析のための豊富なツールを提供し

  2. Pythonで例外を無視して処理を続行する方法【try-exceptの正しい使い方】

    例外を無視してプログラムを続行させる基本の書き方Pythonでは、try-exceptブロックとpass文を組み合わせることで、発生した例外を捕捉しながら、あえて何も処理せずにプログラムを続行できます。主な書き方は以下の2通りです。方法1:bare except(裸のexcept)を使うtry: 1/0except: pass方法2:except Exception を使うtry: 1/0except Exception: passどちらの場合も、pass文が「例外が発生しても何もしない」という役割を果たし、プログラムはそのまま次の処理へ進みます。bare except