Exception difference 2.4 ==> 2.5

D

D'Arcy J.M. Cain

I am having a strange problem and I can't seem to zero in on it. I am
also having trouble reducing it to a small enough snippet that I can
post here. I think that I am doing what the more complex script does
but none of my attempts fail. So, here is a description just in case
someone has seen something that smells like this and can suggest some
areas to do further poking.

I have a class that subclasses xmlrpcserver.RequestHandler. It has a
method that takes a function name that it looks up with getattr. It
then calls the looked up method in this try/except block:

try:
return server_method(pkt)
except Exception, failure:
syslog(LOG_WARNING, "%s, %s" % (Exception, failure))
self.print_tb(sys.exc_info())

try: fault = self.faultConverter.errorToFault(failure)
except Exception, err:
syslog(LOG_ERR, "Error processing failure: %r" % err)
fault = xmlrpclib.Fault(8002, "Internal error")

syslog(LOG_DEBUG, "Converted failure %r to fault %r (%r)" %
\ (failure, fault, failure))

if fault.faultCode < 10000:
syslog(LOG_ERR, "Unconverted fault: %r" % failure)

return fault

This class is then subclassed by another class that adds the methods
that are to be looked up. Those methods may raise exceptions if there
are errors.

Under Python 2.4 this works fine. If an exception is raised in the
looked up method it gets handled by this code just fine. Under 2.5,
however, the exception is not caught here. It's as if there was no
try/except here at all.

I'm not sure if I have left off some critical piece of information or
just littered this post with red herrings. I'm open to both
reasoned suggestions as well as wild speculation.
 
R

Ross Ridge

D'Arcy J.M. Cain said:
Under Python 2.4 this works fine. If an exception is raised in the
looked up method it gets handled by this code just fine. Under 2.5,
however, the exception is not caught here. It's as if there was no
try/except here at all.

Python 2.5 changed the exception hierarchy a bit. The Exception class
is no longer at the root and now inheirits from BaseException. If the
exception being thrown was KeyboardInterrupt or SystemExit then it won't
be caught by your code.

Ross Ridge
 
D

D'Arcy J.M. Cain

Python 2.5 changed the exception hierarchy a bit. The Exception class
is no longer at the root and now inheirits from BaseException. If the
exception being thrown was KeyboardInterrupt or SystemExit then it won't
be caught by your code.

Yes, I was aware of that but the error not being caught is
RuntimeError. I also tried a bare "except" just to be sure but same
behaviour.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,965
Messages
2,570,148
Members
46,710
Latest member
FredricRen

Latest Threads

Top