Error handling middleware is designed to catch any exception which happened lower down the execution chain and handle the exception in an appropriate way. The WSGI server or runCGI
application will handle any exception left uncaught, usually by displaying an HTML page with a message such as "Server Error 500" so error handling middleware is not essential.
The web.wsgi.error module provides one class Error
which does not alter the environ
dictionary but does catch any exception and print an HTML display of the traceback information. It can be used like this:
import web.wsgi.base, web.wsgi.error class Application(web.wsgi.base.BaseApplication): def start(self): raise Exception('Test error is caught and displayed') application = web.wsgi.error.Error( Application(), )
You can also create your own error handling class by deriving a middleware class from web.wsgi.error.Error
. In this example a text traceback is displayed instead:
from web.wsgi import * class simpleApp(base.BaseApplication): def start(self): raise Exception('Test Exception') class myError(error.Error): def error(self): "Generate an error report" return ( '200 Error Handled', [('Content-type','text/html')], [web.error.info()] ) application = myError( simpleApp(), )
The error method should return the values status
, headers
, iterable
.
You can test this example by running the WSGI server scripts/WSGIServer.py and visiting http://localhost:8000/auth
Note:
We do not need the #!/usr/bin/env python
line or modifications to sys.path
for WSGI applications since the relevant objects are imported from the files, the files are not executed as scripts.
Errors along the lines of the one shown below may be due to incorrectly formed headers with tuples of the wrong length and can be hard to track down.
ValueError: unpack list of wrong size args = ('unpack list of wrong size',)