Vinj Vinj
vinjvinj at yahoo.com
Fri Sep 3 12:54:10 EDT 2004
It woudl be helpful to add to the tutorial how to handle exceptions in mpservlet. I have spent a signifcant amount of time trying to track down exceptions. 1. If there is an exception in a function called thorugh _call_ the servlet just returns a blank page. I added a try/except block in respond using the following two receips from ASPN (I've attached the code). This not only gives you the exceptions but also gives the values of the local variables. 2. Add a file upload example to the tutorial 3. How do you initialize server level code. I plan on having several python processes (each linked to one apache fork) listening on each port and then use a sticky load balancer to ake sure the user goes back to the same process that was handling his request. Also in my db I keep track of all the mod_python servers. Each of these need to read from its own configuration file. I was planning on putting a PYTHON_OPTION in the httpd configuration. But how do i get access to it at init time. I know you can get to it by req.get_option but that happens only a request time. Is there any way to get access to this at mod_python initialization time. import sys, traceback ----------------------------------------------------- def print_exc_web(servlet): """ Print the usual traceback information, followed by a listing of all the local variables in each frame. """ tb = sys.exc_info()[2] while 1: if not tb.tb_next: break tb = tb.tb_next stack = [] f = tb.tb_frame while f: stack.append(f) f = f.f_back stack.reverse() servlet.writeln(ErrorMsg()) servlet.writeln("Locals by frame, innermost last") for frame in stack: servlet.writeln('') servlet.writeln("Frame %s in %s at line %s" % (frame.f_code.co_name, frame.f_code.co_filename, frame.f_lineno)) for key, value in frame.f_locals.items(): servlet.writeln("\t%20s = " % key,) #We have to be careful not to cause a new error in our error #printer! Calling str() on an unknown object could cause an #error we don't want. try: servlet.writeln(value) except: servlet.writeln("<ERROR WHILE PRINTING VALUE>") def ErrorMsg(escape=0): """ returns: string simualtes the traceback output and if argemument <escape> set to 1 (true) the string will be converted to fit into html documents without problems. """ import traceback, sys, string type=None value=None tb=None limit=None type, value, tb = sys.exc_info() body = "Traceback (innermost last):\n" list = traceback.format_tb(tb, limit) + traceback.format_exception_only(type, value) body = body + "%-20s %s" % ( string.join(list[:-1], ""), list[-1], ) if escape: import cgi body = cgi.escape(body) return body
|