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

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

Pythonにおける LookupError は、マッピング(辞書など)やシーケンス(リスト・タプルなど)に対して、存在しないキーや無効なインデックスでアクセスした際に発生する例外の基底クラスです。

このクラスを直接継承している主な例外は次の2つです。

  • IndexError:シーケンスの範囲外のインデックスにアクセスしたときに発生する
  • KeyError:辞書に存在しないキーを参照したときに発生する

つまり、これらの例外をまとめて処理したい場合は、親クラスである LookupError を except 句に指定するだけで対応できます。

例外をキャッチして種類を確認するコード例

以下のコードでは、リストの範囲外のインデックスにアクセスし、発生した例外をキャッチしてその種類を表示しています。

import sys

try:
    foo = ['a', 's', 'd', 'f', 'g']
    print(foo[5])
except IndexError as e:
    print(e)
    print(type(e).__name__)

実行結果

list index out of range
IndexError

リストの要素数は5個(有効なインデックスは0〜4)であるため、foo[5] へのアクセスは範囲外となり、IndexError が発生します。except ブロック内でエラーメッセージと例外の型を出力することで、何が原因で例外が起きたのかを簡単に特定できます。

LookupErrorでIndexErrorとKeyErrorをまとめてキャッチする

LookupError を使えば、IndexErrorKeyError の両方を1つの except 句で捕捉できます。

try:
    d = {'name': 'Taro'}
    print(d['age'])
except LookupError as e:
    print(f"{type(e).__name__}: {e}")

実行すると KeyError: 'age' のように表示されます。これは、辞書に存在しないキーへのアクセスが LookupError として正しく処理されたことを示しています。

まとめ

LookupErrorIndexErrorKeyError の共通の親クラスであり、個別に捕捉するか、親クラスで一括して処理するかを選べます。try-except 構文と組み合わせることで、予期しないプログラムの停止を防ぎ、堅牢なコードを書くことができます。

  1. 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

  2. Pythonのリスト内包表記で例外をキャッチするには?原因と対処法を解説

    Pythonには、例外を処理したり無視したりするための組み込み関数は存在しません。そのため、リスト内包表記の中ですべての例外を処理することは不可能です。 その理由は、リスト内包表記が「式(expression)」で構成されている点にあります。例外のキャッチや無視、ハンドリングを行えるのは「文(statement)」である try〜except ブロックだけだからです。式の中に try-except を埋め込むことは、Pythonの文法上できません。 現実的な回避策:関数へ処理を委譲する この制限に対する実用的な解決策のひとつが、例外が発生しうる部分式の評価を「関数」に委譲する方法です。関数の中