Python sys.exc_info()メソッド:例外情報を取得

実際にプログラムをデバッグするプロセスでは、例外のタイプのみを取得するだけでは不十分な場合があり、問題を解決するために、より詳細な例外情報に頼る必要があります。

例外をキャッチする場合、より多くの例外情報を取得するには2つの方法があります。

  1. sysモジュールでexc_infoメソッドを使用します。
  2. トレースバックモジュールで関連する関数を使用します。


このセクションでは、最初にsysモジュールのexc_info()メソッドを使用して、より多くの例外情報を取得する方法を紹介します。

sysモジュールの詳細については、「Python sys module」を参照してください。

モジュールsysには、exc_info()とlast_traceback()の例外のすべての情報を返すことができる2つのメソッドがあります。これらの2つの関数の機能と使用法は同じです。このセクションでは、例としてexc_info()メソッドのみを使用します。

exc_info()メソッドは、現在の例外情報をタプルの形式で返します。タプルには、タイプ、値、トレースバックの3つの要素が含まれています。これらの意味は次のとおりです。

  • type:例外タイプの名前。BaseExceptionのサブクラスです(  Python  例外クラスの場合、「Pythonの一般的な例外タイプ」のセクションを参照できます
  • 値:キャッチされた例外インスタンス。
  • traceback:はトレースバックオブジェクトです

コード例:

sysモジュールを使用する前に、import 使用してimport sys
 try インポートする必要があります
    x = int(input(" 配当を入力してください:" ))
     print" 30で割った"、x、"に等しい"、30 / x)
 以外print (sys.exc_info())
     print" その他の例外... 。"

0を入力すると、プログラムの操作結果は次のようになります。

配当金を入力してください:0 < クラス ' ZeroDivisionError ' >、ZeroDivisionError(' ゼロ除算'))、<0x000001FCF638DD48のトレースバックオブジェクト> 
その他の異常...

出力の2行目は、スローされた例外に関するすべての情報です。これは3つの要素を持つタプルです。最初の要素はZeroDivisionErrorクラス、2番目の要素は例外タイプZeroDivisionErrorクラスのインスタンス、3番目の要素は各要素はトレースバックオブジェクトです。このうち、スローされた例外のタイプと説明情報は最初の2つの要素から確認できます。3番目の要素はトレースバックオブジェクトであり、例外に関する情報を直接確認することはできないため、追加の処理が必要です。

トレースバックオブジェクトに含まれるコンテンツを表示するには、最初にトレースバックモジュールを導入してから、トレースバックモジュールでprint_tbメソッドを呼び出し、sys.exc_info()によるトレースバックオブジェクト出力をパラメーターとして取得する必要があります。たとえば、次のとおりです。

sysのモジュールの前に、使用インポート導入
インポートSYS
 導入トレースバックモジュールの
インポートは、トレースバック
 を試して
    X = INT(INPUT(" :配当を入力" ))
     プリント" 30分割"、X、" 等しい"、30 / X)
 を除くプリント(sys.exc_info()) 
    traceback.print_tb(SYS。 exc_info()[2 ])
     print" その他の例外... "

0を入力すると、プログラムの実行結果は次のようになります。

配当金を入力してください:0
  ファイル" C:\ Users \ mengma \ Desktop \ demo.py "、7行目 <module>で
     印刷" 30除以"、x、" 等号"、30 / x)
その他の異常...

ご覧のとおり、出力情報には、ファイル名、例外がスローされる行数、例外をスローする特定のコードなど、より多くの例外情報が含まれています。

print_tbメソッドは、トレースバックモジュールの多くのメソッドの1つにすぎません。トレースバックモジュールに関するより多くの異常な情報を取得する方法については、後続の章で詳しく紹介します。

おすすめ

転載: www.cnblogs.com/bashliuhe/p/12749323.html