John Keyes
john.keyes at secantus.com
Fri Sep 29 06:09:53 EDT 2006
Hi guys, I've included some test code (see below) for some weird behaviour I've noticed. I have dispatcher.py set up as a handler which dynamically imports another handler (testhandler.py) and then calls it's handler function. The handler function in testhandler throws a user defined exception (see __init__.py) which the dispatcher is explicity set up to catch (see except MyError). If I import testhandler using apache.import_module I get the following output: test testhandler - b4 raise exception - MyError - jk Yet if I use __import__ and getattr I get the following output: test testhandler - b4 raise myerror As you can see using import_module the incorrect except block is executed, but the class name of the exception is correct. Can anyone explain to me why this is the case? I've the code included inline but if you want to run the code I've attached a zip file as well. Apache - 2.0.58 mod_python - 3.2.8 Python - 2.4.3 Cheers, -John K == test.__init__.py == class MyError(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg == test.dispatcher.py == from mod_python import apache from test import MyError def handler(req): req.write("\ntest") try: #test_handler = apache.import_module('test.handlers.testhandler') test_handler = my_import('test.handlers.testhandler') val = test_handler.handler(req) except MyError, me: req.write("\nmyerror") except Exception, e: req.write("\nexception - %s - %s" % (e.__class__.__name__, e)) return apache.OK def my_import(name): mod = __import__(name) components = name.split('.') for comp in components[1:]: mod = getattr(mod, comp) return mod == test.handlers.testhandler.py == from mod_python import apache from test import MyError def handler(req): req.write("\ntesthandler - b4 raise") raise MyError('jk') req.write("\ntesthandler - af raise") return apache.OK -------------- next part -------------- A non-text attachment was scrubbed... Name: import_test.zip Type: application/zip Size: 1113 bytes Desc: not available Url : http://mm_cfg_has_not_been_edited_to_set_host_domains/pipermail/mod_python/attachments/20060929/3bba7e00/import_test.zip
|