Python でスタックトレースを出力する
Muhammad Waiz Khan
2023年1月30日
このチュートリアルでは、Python でのプログラムの実行を停止せずに、スタックトレースを出力するためのさまざまなメソッドを調べます。
スタックトレースには、特定の時間にアクティブなメソッド呼び出しのリストが含まれています。次の方法を使用して、Python でスタックトレースを出力できます。
Python で traceback
モジュールを使用してスタックトレースを出力する
traceback
モジュールは、Python でスタックトレースを抽出、フォーマット、および出力する機能を提供します。traceback.format_exc()
メソッドは、traceback オブジェクトからの例外およびスタックトレースエントリに関する情報を含む文字列を返します。
format_exc()
メソッドを使用して、try
および except
ステートメントでスタックトレースを出力できます。以下のサンプルコードは、Python で traceback.format_exc()
メソッドを使用してスタックトレースを出力する方法を示しています。
import traceback
import sys
try:
myfunction()
except Exception:
print(traceback.format_exc())
出力:
Traceback (most recent call last):
File "C:\Test\test.py", line 5, in <module>
myfunction()
NameError: name 'myfunction' is not defined
print()
関数を使用する代わりに、logger.debug()
メソッドを使用して出力をログに記録することもできます。ログを記録するとデバッグが容易になるためです。次のメソッドで logger.debug()
メソッドを使用すると、Python でスタックトレースをログに記録できます。
import logging
import traceback
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
try:
myfunction()
except Exception:
logger.debug(traceback.format_exc())
出力:
DEBUG:__main__:Traceback (most recent call last):
File "C:\Test\test.py", line 8, in <module>
myfunction()
NameError: name 'myfunction' is not defined
Python で logging.exception()
メソッドを使用してスタックトレースを出力する
logging
モジュールの logging.exception()
メソッドを使用して、Python でスタックトレースを取得することもできます。logging.exception()
メソッドは、例外情報を含むメッセージをログに記録します。これを使用して、Python でスタックトレースを次のように出力できます。
import logging
import traceback
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
try:
myfunction()
except Exception:
logging.info("General exception noted.", exc_info=True)
出力:
INFO:root:General exception noted.
Traceback (most recent call last):
File "C:\Test\test.py", line 8, in <module>
myfunction()
NameError: name 'myfunction' is not defined