カテゴリ: Python 更新日: 2025/12/16

Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門

Pythonでエラースタックトレースを表示・取得する方法
Pythonでエラースタックトレースを表示・取得する方法

先生と生徒の会話形式で理解しよう

生徒

「Pythonのプログラムがエラーになると、長い英語のメッセージと数字がたくさん出てきて、正直よく分からないんです。あの細かい表示って何なんでしょうか?」

先生

「あの長い表示はスタックトレースと呼ばれていて、エラーがどこで起きたのかを教えてくれるとても大事な情報なんです。Pythonの例外処理やデバッグでは欠かせない仕組みですよ。」

生徒

「スタックトレースって名前も難しそうですし、自分で表示したり保存したりできるんですか?画面に出るだけだともったいない気がします。」

先生

「もちろんできますよ。Pythonにはtracebackという標準モジュールが用意されていて、自分でスタックトレースを表示したり文字列として取得したり、ログファイルに残したりできます。仕組みが分かると例外処理が一気に扱いやすくなりますよ。」

-

1. スタックトレースとは?Pythonのエラーの足跡を追いかける情報

1. スタックトレースとは?Pythonのエラーの足跡を追いかける情報
1. スタックトレースとは?Pythonのエラーの足跡を追いかける情報

スタックトレースとは、プログラムがエラーで止まったときに「どの関数からどの関数を呼び出して、最終的にどこで例外が発生したのか」を順番に教えてくれる情報です。Pythonのエラーメッセージに表示されるファイル名や行番号、関数名の一覧がまさにスタックトレースです。プログラムの実行経路をさかのぼるための足跡だとイメージすると理解しやすくなります。

初心者のうちは、スタックトレースが長くて怖く感じるかもしれませんが、実はとても親切な情報です。どの行で間違ったのか、どの関数から呼ばれたのかが具体的に書かれているため、エラーの原因を特定する手がかりになります。Pythonの例外処理を学ぶときには、スタックトレースを読み解くことと、必要に応じて自分で表示や取得を行う方法をセットで覚えておくと、エラーハンドリングの力が一気に高まります。

2. 例外がそのまま発生したときのスタックトレース表示

2. 例外がそのまま発生したときのスタックトレース表示
2. 例外がそのまま発生したときのスタックトレース表示

まずは、スタックトレースが何もしなくても自動で表示されるケースを確認しましょう。Pythonでは、tryで囲まれていない場所で例外が発生すると、インタプリタが自動的にスタックトレースを画面に表示します。これはデバッグ中には便利ですが、実際のアプリケーションではユーザーにそのまま見せたくない場合も多く、しっかりとしたエラーハンドリングが必要になります。


def divide(a, b):
    return a / b

result = divide(10, 0)
print(result)

このコードを実行すると、ZeroDivisionErrorとともにスタックトレースが自動的に表示されます。どの行でdivide関数が呼び出され、どこでエラーになったかが一覧になって出力されます。ここまではPythonが自動で行ってくれる標準的な動きですが、現場ではこの情報を自分の好きなタイミングで表示したりログに残したりしたくなります。そのときに使うのがtracebackモジュールです。

3. traceback.print_excでスタックトレースを明示的に表示する

3. traceback.print_excでスタックトレースを明示的に表示する
3. traceback.print_excでスタックトレースを明示的に表示する

スタックトレースを自分で表示したいときには、traceback.print_excという関数を使います。これはtryとexceptで例外をキャッチしたあとでも、元のスタックトレースをきれいな形式で出力してくれる便利な関数です。例外を握りつぶしてしまわず、開発者向けには詳しい情報を残したいときにとても役立ちます。


import traceback

def divide(a, b):
    return a / b

try:
    result = divide(10, 0)
    print(result)
except Exception:
    print("エラーが発生しました。詳細はスタックトレースを確認してください。")
    traceback.print_exc()

このように書くと、ユーザーには簡単なメッセージを表示しつつ、開発者はtraceback.print_excの出力から詳しいエラー位置を確認できます。例外オブジェクトを直接扱わなくても使えるため、初心者の方にも扱いやすい関数です。スタックトレースを画面に出してデバッグしたい場合には、まずこの書き方から慣れていくとよいでしょう。

4. traceback.format_excでスタックトレースを文字列として取得する

4. traceback.format_excでスタックトレースを文字列として取得する
4. traceback.format_excでスタックトレースを文字列として取得する

スタックトレースを単に表示するだけでなく、文字列として取得したい場面もあります。例えば、ログファイルに書き込んだり、メールで通知したり、画面には見せずに内部で保存したいケースです。そのようなときに便利なのがtraceback.format_excです。printではなくformatという名前の通り、スタックトレースを整形済みのテキストとして返してくれます。


import traceback

def divide(a, b):
    return a / b

def main():
    try:
        result = divide(10, 0)
        print(result)
    except Exception:
        error_text = traceback.format_exc()
        with open("error.log", "a", encoding="utf-8") as f:
            f.write(error_text)
        print("エラーの詳細をログファイルに保存しました。")

main()

このサンプルでは、スタックトレースを文字列として受け取り、error.logというファイルに追記しています。後から落ち着いてファイルを開けば、どの関数のどの行でエラーが発生したのか一目で分かります。Pythonの例外処理とログ設計を組み合わせることで、実運用に耐えるエラーハンドリングが可能になります。

-

5. loggingモジュールと組み合わせてスタックトレースを記録する

5. loggingモジュールと組み合わせてスタックトレースを記録する
5. loggingモジュールと組み合わせてスタックトレースを記録する

さらに一歩進んだ使い方として、loggingモジュールとtracebackを組み合わせるパターンがあります。loggingにはexc_infoという引数があり、これを使うと例外情報付きのログを簡単に出力できます。スタックトレースも含めてエラーログを残したいときには、この仕組みを活用するとシンプルなコードで分かりやすいログを残せます。


import logging

logging.basicConfig(
    level=logging.ERROR,
    filename="app.log",
    format="%(asctime)s [%(levelname)s] %(message)s",
    encoding="utf-8"
)

def divide(a, b):
    return a / b

try:
    result = divide(10, 0)
    print(result)
except Exception:
    logging.error("計算中にエラーが発生しました", exc_info=True)

このように書くと、app.logの中にエラーメッセージとスタックトレースがまとめて記録されます。traceback.format_excを自分で呼び出さなくても、exc_info=Trueを指定するだけでよいのがポイントです。小さなスクリプトでは画面出力だけでも足りますが、少し規模が大きくなってきたら、ログファイルとスタックトレースを活用する構成に切り替えていくと安心です。

6. 初心者がスタックトレースを扱うときに意識したいポイント

6. 初心者がスタックトレースを扱うときに意識したいポイント
6. 初心者がスタックトレースを扱うときに意識したいポイント

最後に、Pythonのスタックトレースを扱うときに初心者が意識しておくと便利なポイントをまとめます。まず、スタックトレースは怖いものではなく、エラーの場所を教えてくれる頼もしい味方だと捉えることが大切です。表示された行番号や関数名を一つずつ追いかけるだけでも、バグの原因に近づくことができます。慣れてくると、どんな例外が出ても落ち着いて対処できるようになります。

また、実際の現場では、ただエラーを表示するだけでなく、スタックトレースをきちんと保存しておくことが求められます。traceback.print_excで画面に表示する方法、traceback.format_excで文字列として取得する方法、loggingモジュールと組み合わせてログファイルに残す方法など、自分の用途に合ったパターンを少しずつ身につけていきましょう。Pythonの例外処理とスタックトレースの取り扱いに慣れておくと、プログラムの品質と信頼性を大きく高めることができます。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
PHP
PHPのマルチバイト文字列を正しく扱う方法!初心者向けにmb_strlenとmb_substrをやさしく解説
New2
PHP
PHP の break, continue の使い方を完全解説!初心者でもわかるループ制御
New3
Python
Pythonで日本の元号を扱う方法を徹底解説!令和・平成の変換もバッチリ対応
New4
Python
Pythonの三項演算子とは?一行で条件分岐を記述する方法
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
No.2
Java&Spring記事人気No2
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.3
Java&Spring記事人気No3
Python
Pythonのライブラリとは?標準ライブラリとサードパーティライブラリの違いを初心者向けに解説!
No.4
Java&Spring記事人気No4
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.6
Java&Spring記事人気No6
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.7
Java&Spring記事人気No7
PHP
PHP の基本構文(開始タグ・コメント・インデント)を完全ガイド!初心者向け解説
No.8
Java&Spring記事人気No8
PHP
PHPで画像ファイルをアップロードする方法を初心者向けに徹底解説!わかりやすい画像処理入門
-
-