python

しょっちゅう忘れることを書いておく。

66

1633 views

1. 例外発生時にトレースを表示するコード

import traceback

if __name__ == '__main__':
    try:
        # 処理
    except:
        print(traceback.format_exc())

解説

  • tracebackモジュールは、エラーの詳細なトレースバック(スタックトレース)を取得するために使用されます。
  • tryブロックで実行するコードを記述し、例外が発生した場合はexceptブロックが実行されます。
  • traceback.format_exc()を使うことで、直近に発生した例外のトレースバックを文字列として取得し、printで表示します。これにより、どのようなエラーがどこで発生したのかを詳細に確認できます。

2. tracebackが使えない場合の対処方法

#coding:UTF-8

import sys
import inspect

if __name__ == '__main__':

    try:
        with open("notexist.txt") as f:
            f.read()
    except:
        # 例外の種類を表示
        print(str(sys.exc_info()[0]))
        # 例外メッセージを表示
        print(str(sys.exc_info()[1]))

        # トレースバックオブジェクトを取得して詳細情報を表示
        traceback_object = sys.exc_info()[2]
        while traceback_object:
            print(inspect.getframeinfo(traceback_object.tb_frame))
            traceback_object = traceback_object.tb_next

解説

  • sys.exc_info()は、現在発生している例外に関する情報を返します。これは3つの要素を含むタプルで、(例外の型, 例外の値, トレースバックオブジェクト)が含まれます。
  • str(sys.exc_info()[0])str(sys.exc_info()[1])で、例外の種類とメッセージを表示します。
  • sys.exc_info()[2]で取得したトレースバックオブジェクトを使って、手動でトレースバックを表示します。inspect.getframeinfo()を使用して、エラーが発生した場所の詳細(ファイル名、行番号など)を取得し、それを表示します。
  • このコードは、組み込みPython環境などでtracebackモジュールが使用できない場合の代替手段として役立ちます。

ポイント

  • tracebackが利用できる環境では、traceback.format_exc()が簡単で便利です。詳細なトレースバックを簡単に取得できます。
  • 組み込み環境などでtracebackが使えない場合、sysinspectを組み合わせて手動でトレースバックを再現できます。これにより、エラーの発生場所や詳細な情報を表示可能です。

Page 11 of 69.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626