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

PythonでTypeError例外をキャッチ(捕捉)する方法

PythonにおけるTypeErrorは、互換性のない型のオブジェクト同士を組み合わせた場合や、関数に想定外の型の引数を渡した場合に発生する例外です。例えば、リストと文字列を連結しようとしたり、数値を必要とする処理に文字列を渡したりすると、このエラーが発生します。

TypeErrorの主な発生原因

  • 異なる型のオブジェクトを演算子で結合・操作した場合(例:リスト + 文字列)
  • 関数やメソッドに、期待される型と異なる型の引数を渡した場合
  • 整数と文字列など、比較できない型同士を比較した場合

try-exceptを使ったTypeErrorの捕捉方法

TypeErrorが発生してもプログラムを停止させずに処理を続行したい場合は、try-except構文を使用して例外を捕捉します。以下の例では、リストと文字列を連結しようとしてTypeErrorが発生し、それをキャッチしてエラー内容を出力しています。

コード例

import sys

try:
    ny = 'Statue of Liberty'
    my_list = [3, 4, 5, 8, 9]
    print(my_list + ny)
except TypeError as e:
    print(e)
    print(type(e))

実行結果

can only concatenate list (not "str") to list
<class 'TypeError'>

コードの解説

  • tryブロック内に、エラーが発生する可能性のある処理を記述します。ここではmy_list + nyという、リストと文字列の連結を試みています。
  • TypeErrorが発生すると、直ちにexcept TypeError as e:ブロックへ制御が移り、プログラムのクラッシュを回避できます。
  • 変数eには発生した例外オブジェクトが格納され、print(e)でエラーメッセージを確認できます。
  • type(e)を使用すると、捕捉した例外の型(クラス名)を確認できます。

補足:より安全な例外処理のポイント

特定の例外だけを捕捉することで、予期しない他のエラーを見逃さずに済みます。また、複数の例外をまとめて捕捉したい場合はexcept (TypeError, ValueError) as e:のようにタプルで指定できます。さらに、後処理が必要な場合はfinallyブロックを組み合わせると、例外の有無にかかわらず必ず実行される処理を記述できます。

  1. Pythonで例外の詳細情報(種類・メッセージ・行番号)を取得する方法

    Pythonの例外情報を取得するとはPythonのコードが例外(Exception)をスローした場合、それを捕捉して、例外の種類、エラーメッセージ、トレースバックを表示できます。さらに、例外が発生したファイル名や行番号といった情報もPythonスクリプト内で取得することが可能です。sys.exc_info()で取得できる3つの要素例外発生時には、type(型)、value(値)、traceback(トレースバック)という3つのパラメータからエラーの詳細を把握できます。type: 発生した例外の種類(クラス)を示します。value: エラーメッセージそのものが格納されています。traceback

  2. PythonでKeyError例外をキャッチする方法をわかりやすく解説

    Pythonでは、辞書(dict)に存在しないキーを使って値へアクセスしようとすると、KeyError例外が発生します。この記事では、try-except文を使ってKeyErrorをキャッチし、例外の種類や詳細情報を確認する方法を解説します。 KeyErrorが発生する仕組み 次のコードは、辞書に存在しないキー c で値を取得しようとしているため、KeyErrorが発生します。sys.exc_info() を使うと、発生した例外の型などの情報を取得できます。 import sys try: s = {a: 5, b: 7}[c] except: print(sys.exc_i