Re: [Zope-dev] Pointless exception re-raising in DA.py

2004-03-25 Thread Andrew Bennetts
On Thu, Mar 25, 2004 at 10:23:27AM +, Chris Withers wrote:
> Dieter Maurer wrote:
> 
> >   try: DB__=dbc()
> >   except:
> > exc_type, exc_value, trc = sys.exc_info()
> > raise DatabaseError('%s is not connected to a database' % self.id,
> > exc_type,
> >  exc_value), trc
> 
> I didn't know you could re-raise a traceback like this... where's tha 
> tsyntax documented?

In the language reference:
http://www.python.org/doc/current/ref/raise.html

See also the sys.exc_info docs in the library reference:
http://www.python.org/doc/current/lib/module-sys.html#l2h-331

-Andrew.


___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] Pointless exception re-raising in DA.py

2004-03-25 Thread Chris Withers
Dieter Maurer wrote:

   try: DB__=dbc()
   except:
 exc_type, exc_value, trc = sys.exc_info()
 raise DatabaseError('%s is not connected to a database' % self.id,
 exc_type,
 exc_value), trc
I didn't know you could re-raise a traceback like this... where's tha tsyntax 
documented?

Define "DatabaseError" in such a way that its "__str__" includes
information about the original exception.
This seems needlessly overcomplicated to me...

Chris

--
Simplistix - Content Management, Zope & Python Consulting
   - http://www.simplistix.co.uk
___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] Pointless exception re-raising in DA.py

2004-03-25 Thread Chris Withers
Clemens Robbenhaar wrote:
 Ok, if this is the proper dance to catch such exceptions with Zope
without risking ZODB corruption I will go with it. So far I have not
been sure, that ConflictError is the only type needing special
treatement in these cases.
Well, the PROPER dance would be to only catch exceptions that you're happy to 
ignroe from your database. You should be able to find those otu fairly quickly. 
Any new ones htat come along later probably want to be looked at by you before 
being automatically ignored...

Chris

--
Simplistix - Content Management, Zope & Python Consulting
   - http://www.simplistix.co.uk
___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] Pointless exception re-raising in DA.py

2004-03-24 Thread Dieter Maurer
Chris Withers wrote at 2004-3-24 15:36 +:
> ...
>>  The reason is that I would like to treat errors when accessing
>> an external data base different from other errors; often the data
>> obtained there is only "optional" to the page, so I don't want to show
>> usered the error page in this case, only to fill up doem slot with
>> "sorry, that certain piece of information is not availabe, because our
>> sql data base sucks".
>
>...this is an application level decision. The code currently makes it very easy, 
>but at the expense of debugging any unexpected exceptions that code throws. 

You can have both!
It is just a little more work for you (I know you are lazy...):

   try: DB__=dbc()
   except:
 exc_type, exc_value, trc = sys.exc_info()
 raise DatabaseError('%s is not connected to a database' % self.id,
 exc_type,
 exc_value), trc
 trc = None


Define "DatabaseError" in such a way that its "__str__" includes
information about the original exception.

-- 
Dieter

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] Pointless exception re-raising in DA.py

2004-03-24 Thread Clemens Robbenhaar

Hi Chris,

 [...]
 > 
 > ...this is an application level decision. The code currently makes it very easy, 
 > but at the expense of debugging any unexpected exceptions that code throws. 
 > While relational data may be "optional" for you, for many people it is 
 > ESSENTIAL, and is used for things like their auth details, content storage, etc.
 > For them, this piece of code causes MAJOR suffering, especially for intermittent 
 > failures where you can't just insert a print_traceback and try again ;-)

 Ok, understand (I guess ;-)

 [...]
 > 
 > >  If it does not, I would have to go back to an evil bare except ...
 > 
 > I wouldn't if I were you:
 > 
 > try:
 >  *your zsql method
 > except ConflictError:
 >  raise
 > except Exception:
 >  return "sorry, that certain piece of information is not availabe, because 
 > our sql data base sucks"

 Ok, if this is the proper dance to catch such exceptions with Zope
without risking ZODB corruption I will go with it. So far I have not
been sure, that ConflictError is the only type needing special
treatement in these cases.

Clemens

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] Pointless exception re-raising in DA.py

2004-03-24 Thread Chris Withers
Hi there,

Clemens Robbenhaar wrote:

 I remeber I made a collector issue about that liens of code:

   http://www.zope.org/Collectors/Zope/927 
Indeed. Catching everything and raising a string exception is evil, and I was 
glad to see that go.

 Previously this has been a string valued exception. Actually I like it
to be an exception of a certain type now, because I can now selectively
catching this DatabaseError and distinguish it from other errors. No
need for a evil bare except. 
Well, I'm afraid I don't agree here...

 The reason is that I would like to treat errors when accessing
an external data base different from other errors; often the data
obtained there is only "optional" to the page, so I don't want to show
usered the error page in this case, only to fill up doem slot with
"sorry, that certain piece of information is not availabe, because our
sql data base sucks".
...this is an application level decision. The code currently makes it very easy, 
but at the expense of debugging any unexpected exceptions that code throws. 
While relational data may be "optional" for you, for many people it is 
ESSENTIAL, and is used for things like their auth details, content storage, etc.
For them, this piece of code causes MAJOR suffering, especially for intermittent 
failures where you can't just insert a print_traceback and try again ;-)

 I see Your point. However is there any chance that "dbc()" does raise
something more specific? I am afraid it does not.
No, that's the whole point. If that code raises an exception, it's much more 
useful if it can be logged and dealt with in its original form rather than have 
it morphed into something uniform and meaningless.

 If it does not, I would have to go back to an evil bare except ...
I wouldn't if I were you:

try:
*your zsql method
except ConflictError:
raise
except Exception:
return "sorry, that certain piece of information is not availabe, because 
our sql data base sucks"

If your database adapter raises a string exception, THEN you have to add a bare 
except on the end of that, but if that's the case you should beat the DA author 
with a stick until he fixes it.

cheers,

Chris

--
Simplistix - Content Management, Zope & Python Consulting
   - http://www.simplistix.co.uk
___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


[Zope-dev] Pointless exception re-raising in DA.py

2004-03-24 Thread Clemens Robbenhaar

Hi Chris,

 > In Shared/DC/ZRDB/DA.py, Line 399 of Zope 2.6.1 and line 419 in 2.7.0, there's 
 > this rather pointless lump of code:
 > 
 >  try: DB__=dbc()
 >  except: raise DatabaseError, (
 >  '%s is not connected to a database' % self.id)
 > 
 > ...which only serves to mask the real cause of the problem when trying to obtain 
 > a connection.

 I remeber I made a collector issue about that liens of code:

   http://www.zope.org/Collectors/Zope/927 

 Previously this has been a string valued exception. Actually I like it
to be an exception of a certain type now, because I can now selectively
catching this DatabaseError and distinguish it from other errors. No
need for a evil bare except. 
 The reason is that I would like to treat errors when accessing
an external data base different from other errors; often the data
obtained there is only "optional" to the page, so I don't want to show
usered the error page in this case, only to fill up doem slot with
"sorry, that certain piece of information is not availabe, because our
sql data base sucks".

 I see Your point. However is there any chance that "dbc()" does raise
something more specific? I am afraid it does not.
 If it does not, I would have to go back to an evil bare except ...

Cheers,
Clemens

 


___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


[Zope-dev] Pointless exception re-raising in DA.py

2004-03-24 Thread Chris Withers
Hi All,

In Shared/DC/ZRDB/DA.py, Line 399 of Zope 2.6.1 and line 419 in 2.7.0, there's 
this rather pointless lump of code:

try: DB__=dbc()
except: raise DatabaseError, (
'%s is not connected to a database' % self.id)
...which only serves to mask the real cause of the problem when trying to obtain 
a connection.

Would anyone have any objections if I changed this to simply:

DB__ = dbc()

?

(if no responses, I'll assume that means you agree with my proposed change ;-)

Chris

--
Simplistix - Content Management, Zope & Python Consulting
   - http://www.simplistix.co.uk
___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )