Подтвердить что ты не робот

Захват ошибки 500 серверов в Flask

Мне нравится ловить флэшку. Это красиво просто:

@app.errorhandler(404)
def pageNotFound(error):
    return "page not found"

работает как шарм. Но это не работает для кода ошибки 500. Я хочу поймать ошибки Python, когда что-то пойдет не так, в коде возникает повышенное исключение. Возможно ли это?

Я должен заметить, что если я явно вызываю return abort(500) в представлении, тогда работает обработчик ошибок 500. Так что это явно, когда сбой кода Python.

Возможно ли это?

4b9b3361

Ответ 1

То, что вы описали, по умолчанию, как работает Flask. Мое предположение заключается в том, что вы работаете в режиме отладки, и поэтому на экране отладки отображаются исключения. Убедитесь, что режим отладки выключен, затем повторите попытку. Вот комментарий непосредственно из самого кода:

Обработка исключений по умолчанию, которая срабатывает, когда возникает исключение, не пойман. В режиме отладки исключение будет повторно поднято в противном случае он регистрируется и обработчик для 500 внутренних сервер используется. Если такой обработчик не существует, значение по умолчанию 500 выводится сообщение об ошибке внутреннего сервера.

Ответ 2

Он отлично работает на моей стороне:

from flask import Flask ,url_for,render_template,request,abort
from  werkzeug.debug import get_current_traceback
app = Flask(__name__)

@app.route('/')
def index():
    try:
        raise Exception("Can't connect to database")
    except Exception,e:
        track= get_current_traceback(skip=1, show_hidden_frames=True,
            ignore_system_exceptions=False)
        track.log()
        abort(500)
    return "index"

@app.errorhandler(500)
def internal_error(error):

    return "500 error"

@app.errorhandler(404)
def not_found(error):
    return "404 error",404

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

Flask не будет устанавливать код ошибки для вас, поэтому при возврате ответа обязательно укажите код состояния HTTP.

Ответ 3

вот мой код snippt

@app.route('/')
def index():
    raise Exception("Can't connect to database")


@app.errorhandler(Exception)
def exception_handler(error):
    return "!!!!"  + repr(error)

Ответ 5

этот код перехватывает 500 кодов состояния и получает ошибку исключения

@app.errorhandler(Exception)
def all_exception_handler(e):
    error = str(traceback.format_exc())