2013-12-16 11 views
5

Mam moduł errors.py do mapowania błędów do szablonów. Byłem chcąc dodać obsługi domyślne błędzie i natknąłem: http://flask.pocoo.org/mailinglist/archive/2012/7/12/default-error-handler/#cbeb8809dc0da7133f14b99e16f31d6bDomyślny program obsługi kolb nie jest wywoływany

Używam Blueprint zmodularyzować rzeczy, a moduł ma następujące błędy mapowania:

@err.app_errorhandler(403) 
def forbidden(e): 
    return render_template('403.html'), 403 

@err.app_errorhandler(500) 
def serverError(e): 
    return render_template('500.html'), 500 

@err.app_errorhandler(Exception) 
def defaultHandler(e): 
    return render_template('defaultError.html'), e.code 

Konkretne mapowania (403, 500) działa dobrze, jeśli przerywam je (lub wywołuję je w sposób naturalny), ale jeśli przestawię się na cokolwiek innego (404 itd.), nie jest wywoływana defaulHandler().

Odpowiedz

1

Wydaje się, że 404 nie faktycznie podnieść wyjątek w kodzie kolby tak domyślny handler robi” nie ma powodu, by zostać trafionym. Mogę go uderzyć, jeśli dodaję raise Exception do jednego z moich mapowań adresów URL i przejdę do niego.

Oczywiście, jeśli mamy mapowanie błędów 500, wyjątek zamieniłby się w błąd po stronie serwera, a zatem wpadłby on w tę zlewnię, więc nie widzę możliwości wykorzystania Wyjątku w tym momencie (I nie przychodzi mi do głowy żaden przypadek, w którym złapałby coś, czego nie byłoby 500 errorhandler).

0

Sprawdź, czy render_template('defaultError.html') i e.code nie powodują żadnych wyjątków. Na przykład nie jestem pewien, że wszelkie twoje wyjątki mogą mieć atrybut code, spróbuj bardzo prosty przykład:

@err.app_errorhandler(Exception) 
def defaultHandler(e): 
    return 'error handler there', 500 
+0

Żadnych wyjątków są podnoszone, że mogę zidentyfikować (uruchomiony za pomocą kolby serwera wbudowane). Myślałam, że moje 500 map zostało trafione, gdyby tak było. – bqui56

+0

Dla mnie działa dobrze, 'flask == 0.10.1' i' wergzeug = 0.9.4'. Informacje o wyjątkach użytkowników sprawdzają, dlaczego Twój kod nie obsługuje tam https://github.com/mitsuhiko/flask/blob/master/flask/app.py#L1475. – tbicr

2

Można to zrobić tak:

app.config['TRAP_HTTP_EXCEPTIONS']=True 
app.register_error_handler(Exception, defaultHandler) 
+0

to działa, dziękuję :) – mucio

Powiązane problemy