when want use flask abort inside try block end in exception block
@app.route('/newsletters/<int:newsletter_id>', methods=['get']) def route_get_newsletter(newsletter_id): if request.method == 'get': try: newsletter = get_newsletter(newsletter_id) if not newsletter: abort(404) except exception, ex: logging.exception("something awful happened!") abort(500) else: return jsonify(newsletter=newsletter) gives output:
error:root:something awful happened! traceback (most recent call last): file "natuurpuntapi.py", line 210, in route_get_newsletter abort(404) file "/usr/lib/python2.7/dist-packages/werkzeug/exceptions.py", line 525, in __call__ raise self.mapping[code](*args, **kwargs) notfound: 404: not found and werkzeug notfound called , 500 response
when put abort(404) outside try: block, works , 404 response
- edit
i found flask abort() uses werkzeug abort() class called aborter() when called raises "raise self.mapping[code](*args, **kwargs)"
does mean can not call abort inside own try block because raise exception , ends in exception?
flask.abort(...) raises exception, 1 of exceptions described in docs, subclasses of werkzeug.exceptions.httpexception. reason why code doesn't work.
but here other trivia:
- if code raises other kinds of exceptions, flask automatically return 500.
- you can create custom error handlers http status codes , exceptions: http://flask.pocoo.org/docs/patterns/errorpages/#error-handlers
- if have
methods=['get'], don't need check method inside view.
given knowledge can rewrite code like:
@app.route('/newsletters/<int:newsletter_id>', methods=['get']) def route_get_newsletter(newsletter_id): newsletter = get_newsletter(newsletter_id) return jsonify(newsletter=newsletter) @app.errorhandler(500) def catch_server_errors(e): logging.exception("something awful happened!")
Comments
Post a Comment