Flaskでのエラーハンドリング:基本から応用まで

この記事では、Flaskでのエラーハンドリングについて解説します。初心者から中級者まで、多くの開発者がエラーハンドリングに困っています。エラーの種類や対処方法、具体的なコード例とその解説、応用例を含めています。

目次

はじめに

FlaskはPythonでウェブアプリケーションを開発するためのフレームワークですが、エラーハンドリングはその中でも特に重要なテーマです。より堅牢なウェブアプリケーションを作成するためには、エラーハンドリングが不可欠です。

Flaskでのエラーハンドリングの基本

Flaskでは`@app.errorhandler`デコレータを用いて、エラーハンドリングをカスタマイズできます。

基本的な使い方

from flask import Flask, render_template

app = Flask(__name__)

@app.errorhandler(404)
def page_not_found(error):
    return render_template('404.html'), 404

if __name__ == '__main__':
    app.run(debug=True)

このコードでは、HTTPステータスコード404(ページが見つからない)に対するエラーハンドリングを行っています。`@app.errorhandler(404)`デコレータが、404エラーが発生した際に`page_not_found`関数を呼び出します。

カスタムエラーのハンドリング

Flaskで独自のエラーを作成してハンドリングする方法について見ていきましょう。

カスタムエラーの定義

class MyCustomException(Exception):
    pass

このようにして、`Exception`クラスを継承した`MyCustomException`クラスを作成できます。

カスタムエラーのハンドリング

@app.errorhandler(MyCustomException)
def handle_custom_error(error):
    return 'カスタムエラーが発生しました', 500

このコードを`@app.errorhandler`デコレータと共に用いることで、`MyCustomException`が発生した際に`handle_custom_error`関数が呼び出されます。

応用例

応用例1:ログ出力

エラーが発生した場面で、ログにその情報を保存することは非常に重要です。

import logging

@app.errorhandler(500)
def internal_server_error(error):
    app.logger.error('Server Error: %s', error)
    return render_template('500.html'), 500

このコードは、HTTPステータスコード500(サーバ内部エラー)が発生した場面で、エラー情報をログに保存します。

応用例2:メール通知

エラーが発生した際に自動でメールを送信する例です。

from flask_mail import Mail, Message

mail = Mail(app)

@app.errorhandler(500)
def internal_server_error_with_mail(error):
    msg = Message('サーバエラー', sender='from@example.com', recipients=['to@example.com'])
    msg.body = str(error)
    mail.send(msg)
    return render_template('500.html'), 500

このコードは、サーバ内部エラーが発生した際に、設定したメールアドレスにエラー情報を送信します。

まとめ

Flaskでのエラーハンドリングは多くのカスタマイズが可能です。基本的なエラーハンドリングから、カスタムエラーや応用例まで、様々な方法でエラーハンドリングを行うことができます。これを機に、Flaskを使ってより堅牢なウェブアプリケーションを開発してみてはいかがでしょうか。

コメント

コメントする

目次