2013-11-28 7 views
8

Być może nie widzę czegoś w documentation.Jak przechwycić wszystkie wyjątki w kolbie?

Chciałbym nie tylko obsługiwać niektóre błędy http, ale wszystkie wyjątki. Powód - chciałbym je zarejestrować przy użyciu własnej logiki niestandardowej (brzmi to jak wymyślanie koła, ale potrzebuję pełnej kontroli nad logowaniem.) Nie chciałbym podnieść serwera do kolan z wyjątkiem, ale zbombardować tylko to konkretne żądanie .

ten sposób mogę uruchomić teraz kolby. Tutaj app.run uruchamia serwer. Jak mogę polecić to nazwać moją metodę obsługi wyjątków, gdy wystąpi wyjątek?

def main(): 
    args = parse_args() 
    app.config['PROPAGATE_EXCEPTIONS'] = True 
    flask_options = {'port' : args.port} 
    if args.host == 'public': 
     flask_options['host'] = '0.0.0.0' 
    app.run(**flask_options) 

if __name__ == '__main__': 
    _sys.exit(main()) 

Odpowiedz

14

należy użyć errorhandler, zobacz dokumentację http://flask.pocoo.org/docs/patterns/errorpages/#error-handlers i http://flask.pocoo.org/docs/api/#flask.Flask.errorhandler. To pozwala uzyskać wszystkie wyjątki podniesione w dispatchers, ale nie obsługuje wyjątków w obsłudze błędów. wszystkie wyjątki:

@app.errorhandler(Exception) 
def all_exception_handler(error): 
    return 'Error', 500 

Zawsze preferuję programy do obsługi wyjątków wyjątkowych lub używam dekoratorów (widoków opartych na klasach) w tych przypadkach.

+2

To nie działa w najnowszych wersjach. W wersji 0.12 ponownie uzyskuję strony błędów HTML. – bwind

+0

@bwind Każdy pomysł, w jaki sposób powinieneś wprowadzić podobną logikę w wersji 0.12? –

+0

@TuukkaMustonen: Tak, zobacz moją odpowiedź na inne pytanie tutaj: http://stackoverflow.com/questions/29332056/global-error-handler-for-any-exception/41655397#41655397 – bwind