1. ホーム
  2. python

[解決済み] トレースバック / sys.exc_info() の値を変数に保存する方法は?

2022-01-28 01:17:46

質問

エラーの名前とトレースバックの詳細を変数に保存したいのですが、どうすればいいですか? 以下は私の試みです。

import sys
try:
    try:
        print x
    except Exception, ex:
        raise NameError
except Exception, er:
    print "0", sys.exc_info()[0]
    print "1", sys.exc_info()[1]
    print "2", sys.exc_info()[2]

出力します。

0 <type 'exceptions.NameError'>
1 
2 <traceback object at 0xbd5fc8>

希望する出力

0 NameError
1
2 Traceback (most recent call last):
  File "exception.py", line 6, in <module>
    raise NameError

追伸:tracebackモジュールを使えば簡単にできることは分かっているのですが、ここでsys.exc_info()[2]オブジェクトの使用法を知りたいのです。

解決方法は?

私はこうしています。

>>> import traceback
>>> try:
...   int('k')
... except:
...   var = traceback.format_exc()
... 
>>> print var
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ValueError: invalid literal for int() with base 10: 'k'

ただし トレースバック・ドキュメント というのも、その後に変数をどのように処理したいかに応じて、より適切な方法が見つかるかもしれないからです。