At 10:00 AM 5/11/2005 -0700, Guido van Rossum wrote: >(3) Full exception information, with the understanding that when >__exit__() returns normally, exception processing will resume as usual >(i.e. __exit__() is called from a finally clause). Exceptions raised >from __exit__() are considered errors/bugs in __exit__() and should be >avoided by robust __exit__() methods.
FYI, there are still use cases for clearing the exception state in an __exit__ method, that might justify allowing a true return from __exit__ to suppress the error. e.g.: class Attempt(object): def __init__(self,type,last=False): self.type = type self.last = last def __enter__(self): pass def __exit__(self,*exc): if exc and not last and issubclass(exc[0],self.type): # suppress exception return True def retry(count, type=Exception): attempt = Attempt(type) for i in range(count-1): yield attempt yield Attempt(type, True) # usage: for attempt in retry(3): do attempt: somethingThatCouldFail() and: class logging_exceptions(object): def __init__(self,logger): self.logger = logger def __enter__(self): pass def __exit__(self,*exc): if exc: # log and suppress error self.logger.error("Unexpected error", exc_info=exc) return True while True: do logging_exceptions(my_logger): processEvents() _______________________________________________ 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