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 Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com