On Wed, Feb 18, 2015 at 8:08 AM, <tak.govo...@gmail.com> wrote: > I want to generate an html page with http response status '200 OK' in case of > an uncaught exception in my wsgi application, instead of web server's > standard '500 Internal Server Error' response for such case. To do so, I've > made the following sample code: > > import sys > > def application(environ, start_response): > def exception(etype, evalue, trace): > start_response('200 OK', [('Content-Type', 'text/plain')]) > return ['Error'] > > sys.excepthook = exception > > 1/0 > > start_response('200 OK', [('Content-Type', 'text/plain')]) > return ['OK'] > > But the function 'exception' is never called, and a standard '500 Internal > Server Error' response is still generated by server in case of an uncaught > exception.
sys.excepthook is called just before the interpreter exits due to an exception. In a mod_wsgi environment, having the interpreter exit just because of an exception would be undesirable. I don't know exactly what it's doing under the hood, but I would assume that the exception never makes it to sys.excepthook because the gateway itself is catching the exception in order to generate the 500 response. > I looked through the documentation, but unable to find the answer. Are there > any ways to handle uncaught by try..except exceptions under mod_wsgi? Here is what PEP 3333 has to say about error handling: https://www.python.org/dev/peps/pep-3333/#error-handling -- https://mail.python.org/mailman/listinfo/python-list