Le flacon a un bon gestionnaire d’erreur en utilisant abort()
ou lorsque l’erreur est réellement survenue.
Dans la documentation Flask, il existe un exemple de gestionnaire d'erreur 404:
@app.errorhandler(404)
def not_found(error):
return render_template('404.html'), 404
J'ai donc essayé de créer un code d'erreur personnalisé comme
if False:
abort(777)
@app.errorhandler(777)
def something_is_wrong(error):
return render_template('777.html'), 777
Mais cela ne fonctionne pas et le débogueur Werkzeug dit: LookupError: aucune exception pour 777
J'ai trouvé cette question qui dit que je devrais le faire comme ceci:
if False:
return '777 error', 777
Malheureusement, le code ci-dessus produit un écran blanc, même le débogueur Werkzeug ne sort pas
Je sais que je peux simplement faire:
if False:
return render_template('777.html')
Mais cela rendra le code plus propre si j'utilise la fonction abort()
. Est-il possible de créer un code d'erreur personnalisé?
La liste des codes de statut HTTP possibles est fixée par l'autorité Internet Assigned Numbers Authority. Vous ne pouvez donc pas en ajouter un personnalisé. Werkzeug le reconnaît et essaie de vous empêcher d'envoyer un code sans signification au navigateur. Parcourez la liste des codes d'état pour en trouver un qui corresponde à votre erreur et utilisez-la.
Édition: Ajout de codes d’état à Werkzeug/Flask
import werkzeug.exceptions as ex
from flask import Flask, abort
class PaymentRequired(ex.HTTPException):
code = 402
description = '<p>You will pay for this!</p>'
abort.mappings[402] = PaymentRequired
app = Flask(__name__)
@app.route('/')
def mainpage():
abort(402)
@app.errorhandler(402)
def payme(e):
return 'Pay me!'
app.run()
En fonction de la lecture de la question, cela peut être utile.
Il existe un moyen plus simple d'ajouter le traitement des pages d'erreur client pour une exception spécifique. Pour ce faire, procédez comme suit:
class MyCustom404(Exception):
pass
@app.errorhandler(404)
def page_not_found(error):
return render_template("errors/404.html"), 404
@app.errorhandler(MyCustom404)
def special_page_not_found(error):
return render_template("errors/custom_404.html"), 404
... puis déclenchez votre nouveau gestionnaire lorsque vous en avez besoin avec
raise MyCustom404
Voir les docs ici .
Dans mon cas, Flask == 0.11.1 Werkzeug == 0.11.10
J'utilise avorter le code de statut http 451 par exemple.
si vous souhaitez utiliser abort () avec un code, un nombre entier, comme abort (451), vous devez tout d'abord créer un HTTPException personnalisé, une sous-classe de HTTPException.et ajouter votre HTTPException à default_exceptions
.
from werkzeug.exceptions import HTTPException, default_exceptions, Aborter
class UnavailableForLegalReasons(HTTPException):
code = 451
description = 'BIG BROTHER IS WATCHING YOU'
default_exceptions[451] = UnavailableForLegalReasons
abort = Aborter() # don't from flask import abort
@app.errorhandler(451)
def uflr(e):
return e, 451
@app.route('/debug')
def debug():
abort(451)
ensuite, lorsque vous accédez au chemin dans le navigateur, vous pouvez regarder ceci
mais la phrase de raison http est UNKNOWN,
tu peux le changer
from werkzeug.http import HTTP_STATUS_CODES
HTTP_STATUS_CODES[451] = 'Unavailable For Legal Reasons' # or even empty
Vous pouvez également utiliser Flask API et son système de traitement des erreurs: