On Thursday 01 June 2006 05:30, Jorge Vargas wrote:
> > The biggest problem is to translate exceptions. One DB API driver
> > raises
> > OperationError when another raises IntegrityError. We need to collect
> > information about what exceptions every driver raise in what
> > situations.
>
> I don't like that even if all the trace info is preserved the exception
> name (which something is all you need to figure out the error) is lost.
If you check the sample code I offered it's easy to preserve the exception
name in the generic exception. It will give something like:
DatabaseError: _mysql_exceptions.OperationalError: (1045, "Access ...
which can pretty easily identify the problem even without a backtrace.
The only purpose of the generic exception here is to present all backend
exceptions under a common name so I can catch a database problem easily
like this:
try:
code
except DatabaseError, why:
do something
instead of this:
try:
code
except (_sqlite.DatabaseError, MyQSLdb.Error, ... endless list of backend
exceptions I don't really want to know about ...):
do something
the later is complicated to do even if I'm considering it, as I don't have
all the backend modules on my system to load and I need to create dummy
exceptions for them so it works on systems where people use other
backends than me.
There is a third alternative, but that is not elegant either (at least
this doesn't require me to create dummy exceptions for the db modules I
don't have around):
try:
code
except Exception, why:
info = sys.exc_info()
try:
module = info[0].__module__
exception = info[0].__name__
finally:
del info
if module in ('_sqlite', '_mysql_exceptions', ...):
do something about the error
else:
raise
--
Dan
-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
sqlobject-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss