I have started working on a new project using ZSI and perhaps one can argue this is a bug in ZSI, but I found it odd. The ZSI dispatcher needs to catch all exceptions and pass that over to the client; in doing so, it passes along the name of the exception that occurred so that the client can know more than just "it failed." Anyways, I am getting off the point, the mechanics of this code in ZSI goes more or less like this:
>>> try: >>> doSomething() >>> except Exception, ex: >>> sendFault(':'.join([ex.__module__, ex.__class__.__name__])) This works just fine for user-defined exceptions like: >>> class UserException(Exception): >>> pass >>> uex = UserException() >>> print ':'.join([uex.__module__, uex.__class__.__name__]) # >>> __main__.UserException But falls on its face with built-in exceptions: >>> ex = Exception() >>> print ':'.join([ex.__module__, ex.__class__.__name__]) # AttributeError! , because the built-in exception instances don't have the __module__ attribute (as of 2.5). The only way this works in 2.4 as well as 2.5 is to do: >>> print ':'.join([ex.__class__.__module__, ex.__class__.__name__]) # >>> exceptions:Exception >>> print ':'.join([uex.__class__.__module__, uex.__class__.__name__]) # >>> __main__:NewException But this is a bit obscure and I don't understand why user-defined exception instances should have a different set of attributes than the built-in exception instances. As well as this is a change from 2.4- >2.5 that breaks existing code for no apparent reason. This smells like it was an overlooked mistake and not a feature. I am tempted to open a bug against python for it, but I didn't know if someone could give a rational reason why that attribute is missing? Thanks, -Scott -- http://mail.python.org/mailman/listinfo/python-list