2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FastAPIで例外を見やすく表示

Posted at

はじめに

FastAPIの例外をPrettyErrorsで見やすく表示するfastapi-pretty-errorsを作成しました。

こういうエラーが...

image.png

こうなります。

image.png

PrettyErrorsとは

PrettyErrorsはPythonの例外を見やすく表示するライブラリです。

FastAPIでの利用についてはこちらのIssueで提案されていますが、
より簡単に導入できるように fastapi-pretty-errors を作成しました。

インストール

pipでインストールします。

pip install fastapi-pretty-errors

Poetryを使っている場合は以下のように追加します。

poetry add fastapi-pretty-errors

使い方

FastAPIに PrettyErrorsMiddlewareミドルウェアとして追加します。

from fastapi import FastAPI
from fastapi_pretty_errors import PrettyErrorsMiddleware

app = FastAPI()
app.add_middleware(PrettyErrorsMiddleware)

PrettyErrorsの設定を変更する場合は、以下のように引数を指定します。
設定可能なオプションについては、PrettyErrorsのドキュメントを参照してください。

app.add_middleware(
    PrettyErrorsMiddleware,
    # 以下に設定を追加
    line_number_first=True,
    lines_before=5,
    lines_after=2,
    # ...
)

PrettyErrorsMiddleware をセットアップし、例外を発生させるエンドポイントを作成します。

main.py
from fastapi import FastAPI
from fastapi_pretty_errors import PrettyErrorsMiddleware
import pretty_errors

app = FastAPI()
app.add_middleware(
    PrettyErrorsMiddleware,
    line_number_first=True,
    lines_before=5,
    lines_after=2,
    line_color=pretty_errors.RED + "> " + pretty_errors.default_config.line_color,
    code_color="  " + pretty_errors.default_config.line_color,
    truncate_code=True,
    display_locals=True,
)


@app.get("/")
async def root():
    raise ValueError("An error occurred")

FastAPIを起動して、エンドポイントにアクセスすると以下のようにフォーマットされたトレースバックが表示されます。

curl http://localhost:8000
{"detail":"Unexpected error occured."}

image.png

さいごに

PrettyErrorsをFastAPIで使いやすくした fastapi-pretty-errors をご紹介しました。
ぜひ使ってみてください!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?