I have some modules that I've written, called from a Web2Py
controller.

I use this:
class CustomException(Exception):
   def __init__(self, errno, strerror):
       self.errno = errno
       self.strerror = strerror
   def __str__(self):
       return repr(str(self.errno)+"-"+self.strerror)

Down in my lowest module, I have this:
from CustomException import CustomException
class Invoices(object)
    def __init__(self,db,customer_id):
        self.db=db
        self.customer_id=customer_id
        self.rows =db(db.invoices.customer_id==self.customer_id) \
               .select(orderby=~db.invoices.invoice_date)
        if None==self.rows:
            raise CustomException(1,"No invoices found")
        if 0==len(self.rows):
            raise CustomException(2,"No invoices found")
        self.current = 0
        self.high=len(self.rows)

So I expect that I can try/except this.  Here's my code, with some
syslog statements. I'll post the syslog output afterwards.

        syslog(str(CustomException))
        try:
            rows=Invoices(db,self.customer_id)
        except CustomException.CustomException:
            rows=[]
        except:
            syslog( "Unexpected error:"+ str(sys.exc_info()[0]))
            raise

Imagine my surprise when I wind up in the catchall except. Especially
given these two syslog entries:

Mar 22 23:00:41 admin01 httpd: <module
'applications.gw.modules.CustomException' from 'applications/gw/
modules/CustomException.py'>
Mar 22 23:00:41 admin01 httpd: Unexpected error:<class
'applications.gw.modules.CustomException.CustomException'>

The two classes match, yet I cannot catch the exception.

I hope somebody can point out the error of my ways...

Ed Greenberg

Reply via email to