On Tue, 12 May 2009 09:20:36 +0000, Steven D'Aprano wrote: > On Tue, 12 May 2009 20:23:25 +1200, Lawrence D'Oliveiro wrote: > >> In message <gu7f97$mt...@reader1.panix.com>, kj wrote: >> >>> I know about the construct: >>> >>> try: >>> # do something >>> except ...: >>> # handle exception >>> else: >>> # do something else >>> >>> ...but I can't come with an example in which the same couldn't be >>> accomplished with [no else] >> >> I'd agree. If you have to resort to a "try .. else", then might I >> respectfully suggest that you're using exceptions in a way that's >> complicated enough to get you into trouble. > > > > try: > rsrc = get(resource) > except ResourceError: > log('no more resources available') > raise > else: > do_something_with(rsrc) > finally: > rsrc.close()
Except of course such a pattern won't work, because if get(resource) fails, rsrc will not exist to be closed. So a better, and simpler, example would be to drop the finally clause: try: rsrc = get(resource) except ResourceError: log('no more resources available') raise else: do_something_with(rsrc) rsrc.close() To really be safe, that should become: try: rsrc = get(resource) except ResourceError: log('no more resources available') raise else: try: do_something_with(rsrc) finally: rsrc.close() which is now starting to get a bit icky (but only a bit, and only because of the nesting, not because of the else). -- Steven -- http://mail.python.org/mailman/listinfo/python-list