Steven Bethard wrote:
> On 5/11/05, Nick Coghlan <[EMAIL PROTECTED]> wrote:
>
>>The gist is that the alternative is to require an __exit__() method to raise
>>TerminateBlock in order to suppress an exception.
>
> So I didn't see any examples that really needed TerminateBlock to
> suppress an exception.
Yeah, I figured out a tidier way to handle it after reading Phillip's message
earlier today. My idea is similar to your second solution, but with an early
exit via break, continue or return still indicated to the __exit__() method via
TerminateBlock so that examples like transaction() continue to do the right
thing:
the_stmt = EXPR1
stmt_enter = getattr(the_stmt, "__enter__", None)
stmt_exit = getattr(the_stmt, "__exit__", None)
if stmt_enter is None or stmt_exit is None:
raise TypeError("User defined statement template required")
terminate = True
VAR1 = stmt_enter() # Omit 'VAR1 =' if no 'as' clause
try:
try:
BLOCK1
except TerminateBlock:
raise # Disallow suppression of TerminateBlock
except:
terminate = False
if not stmt_exit(*sys.exc_info()):
raise
else:
terminate = False
stmt_exit()
finally:
if terminate:
try:
stmt_exit(TerminateBlock, None, None)
except TerminateBlock:
pass
Version 1.5 uses these updated semantics, and the suggested generator
__exit__()
method semantics are adjusted appropriately. I've also added a paragraph in
Open
Issues about removing the ability to suppress exceptions as Guido has
suggested.
However, I'm hoping his objections are based on the assorted horrible
mechanisms
I used in versions before this one - he is quite right that forcing every
__exit__() method to reraise exceptions was a rather ugly wart.
The new version also fixes a typo in the auto_retry example that a couple of
people pointed out, and adds a non-exception related example from Arnold deVos.
The URL is the same as before:
http://members.iinet.net.au/~ncoghlan/public/pep-3XX.html
Cheers,
Nick.
--
Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia
---------------------------------------------------------------
http://boredomandlaziness.blogspot.com
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com