C'è un modo per aggiungere un gestore globale di errori catch-all in cui posso modificare la risposta a una risposta JSON generica?Global error handler per qualsiasi eccezione
Non è possibile utilizzare il segnale got_request_exception
poiché non è consentito modificare la risposta (http://flask.pocoo.org/docs/0.10/signals/).
Al contrario tutti i gestori di segnale vengono eseguiti in ordine indefinito e non modificano alcun dato.
preferirei non avvolgere la funzione app.handle_exception
come ci si sente come API interna. Credo di essere alla ricerca di qualcosa di simile:
@app.errorhandler()
def handle_global_error(e):
return "Global error"
Annotare il errorhandler
non prende alcun parametro, il che significa che sarebbe catturare tutte le eccezioni/codici di stato che non ha un gestore di errore specifico ad essi connessi. So che posso usare errorhandler(500)
o errorhandler(Exception)
per rilevare eccezioni, ma se faccio abort(409)
per esempio, restituirà comunque una risposta HTML.
Questo è così strano. Sto copiando il tuo codice in una shell Python con Flask 0.10.1, e ottengo ancora errori HTML quando richiedi questi endpoint usando curl. Quale versione di Flask stai usando? – joscarsson
Ah, apparentemente qualcosa è cambiato tra 0.10.1 e la versione di git con cui lo stavo testando. – ThiefMaster
https://github.com/mitsuhiko/flask/blob/0.10.1/flask/app.py#L1086 - a quanto pare utilizza solo il codice dell'eccezione nelle versioni precedenti. – ThiefMaster