Exceptions and modules

sam westernsam at hotmail.com
Fri Jul 4 10:27:28 EDT 2003


Hello,

consider the following code:

<module1>
import sys
import threading

class MyException(Exception):
    pass

#from module1 import MyException

class runner(threading.Thread):
    def __init__(self, callableObj):
        self.callableObject=callableObj
        threading.Thread.__init__(self)
    def run(self):
        try:
            self.callableObject.makeCall()
        except MyException, err:
            print "MyException"
            print sys.exc_type, err
        except Exception, err:
            print "Exception"
            print sys.exc_type, err

if __name__ == '__main__':
    if len(sys.argv) != 3:
        print "Usage <module> <class>"
    else:
        callableObj = getattr(__import__(sys.argv[1]), sys.argv[2])()
        thread=runner(callableObj)
        thread.start()
</module1>
<module2>
from module1 import MyException

class Callable:
    def makeCall(self):
        raise MyException("MyException")
</module2>

Now I start the process:

python module1.py module2 Callable

And the result is:

Exception
module1.MyException MyException

So the Exception isn't recognised even though it has the same
namespace and name as the exception defined in the module. I have to
uncomment the 7th line to get my example to behave as I would like it
to.

Is this a bug/feature? Is there any reason why it shouldn't work the
way I expect it to?

Regards,

Sam Owen




More information about the Python-list mailing list