[DB-SIG] Remaining issues with DB API 2.0

M.-A. Lemburg mal@lemburg.com
Thu, 01 Apr 1999 11:38:13 +0200


Andy Dustman wrote:
> 
> > I'd say we make two subclasses of Error: InterfaceError, and
> > DatabaseError.
> 
> Speaking of which, I can't find a obvious way in the Python API to create
> an exception with multiple inheritance. Any ideas?

You mean: how do I create an exception having a predefined base class ?
[I don't see a need for multiple inheritance (with more than one
base class) in this situation.]

Here's an example:

/* Create an exception object, insert it into the module dictionary
   under the given name and return the object pointer; this is NULL in
   case an error occurred. base can be given to indicate the base
   object to be used by the exception object. It should be NULL
   otherwise */

static 
PyObject *insexc(PyObject *moddict,
		 char *name,
		 PyObject *base)
{
    PyObject *v;
    char fullname[256];
    
    sprintf(fullname,MXODBC_MODULE".%s",name);
    v = PyErr_NewException(fullname, base, NULL);
    if (v == NULL)
	return NULL;
    if (PyDict_SetItemString(moddict,name,v))
	return NULL;
    return v;
}

e.g.

    if ((mxODBC_Error = insexc(moddict,"Error",PyExc_StandardError)) == NULL)
	goto onError;
    if ((mxODBC_InterfaceError = insexc(moddict,"InterfaceError",mxODBC_Error))
	== NULL)
	goto onError;


Was that what you meant ?

-- 
Marc-Andre Lemburg                               Y2000: 274 days left
---------------------------------------------------------------------
          : Python Pages >>> http://starship.skyport.net/~lemburg/  :
           ---------------------------------------------------------