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

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

Pythonの例外情報を取得するとは

Pythonのコードが例外(Exception)をスローした場合、それを捕捉して、例外の種類、エラーメッセージ、トレースバックを表示できます。さらに、例外が発生したファイル名や行番号といった情報もPythonスクリプト内で取得することが可能です。

sys.exc_info()で取得できる3つの要素

例外発生時には、type(型)value(値)traceback(トレースバック)という3つのパラメータからエラーの詳細を把握できます。

  • type: 発生した例外の種類(クラス)を示します。
  • value: エラーメッセージそのものが格納されています。
  • traceback: スタックのスナップショットを含み、エラーに関する多くの詳細情報を持っています。

sys.exc_info()関数は、これら3つの属性をタプルとして返します。また、raise文にもこの3つの引数を受け取る形式が用意されています。

サンプルコード:例外の種類・ファイル名・行番号を取得する

以下は、発生した例外の型、ファイル名、行番号を取得して表示するサンプルコードです。

import sys, os
try:
    raise NotImplementedError("No error")
except Exception as e:
    exc_type, exc_obj, exc_tb = sys.exc_info()
    fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
    print(exc_type, fname, exc_tb.tb_lineno)

コードの解説

tryブロック内で意図的にNotImplementedErrorを発生させ、except節で捕捉しています。sys.exc_info()の戻り値をアンパックすることで、例外の型(exc_type)、例外オブジェクト(exc_obj)、トレースバックオブジェクト(exc_tb)をそれぞれ取得できます。

トレースバックオブジェクトのtb_frame.f_code.co_filenameからファイル名を取り出し、os.path.split()でパス部分を除去しています。最後にtb_linenoで例外が発生した行番号を出力します。この方法を使えば、デバッグ時に「どのファイルの何行目でどんな例外が起きたのか」を素早く特定でき、トラブルシューティングの効率が大幅に向上します。

  1. Tkinterでラベルのテキストを取得する方法を解説

    TkinterのLabel(ラベル)ウィジェットは、ウィンドウ上にテキストや画像を表示するために使用される基本的なコンポーネントです。フォントファミリーやパディング、幅・高さなどのオプションを指定することで、ラベルの見た目を自由にカスタマイズできます。ラベルに設定したテキストを取得したい場合は、ラベルウィジェットに対して [text] を指定するだけで、簡単にその値へアクセスできます。以下に具体的なサンプルコードを示します。サンプルコード# 必要なライブラリをインポート from tkinter import * # tkinterフレームのインスタンスを作成 win = Tk() # ウ

  2. 【Python】Tkinterでラベルのテキストを削除する方法をわかりやすく解説

    Tkinterは、PythonでGUIベースのアプリケーションを作成・開発するための標準ライブラリです。この記事では、何らかのテキストが表示されているラベルから、そのテキストを削除する方法を解説します。 ラベルからテキストを削除するには、ラベルの表示を切り替えるトリガーとして機能するボタンを作成します。具体的には、config()メソッドを使ってラベルのtext属性を空の文字列に書き換えます。 サンプルコード # Tkinterライブラリをインポート from tkinter import * # tkinterフレームのインスタンスを作成 win = Tk() # ウィンドウのサイズを