Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!news2.arglkargh.de!news.mixmin.net!rt.uk.eu.org!newsfeed.xs4all.nl!newsfeed1.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.002 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'finally:': 0.07; 'clause': 0.09; 'except:': 0.09; 'jessica': 0.09; 'reached.': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'try:': 0.09; 'def': 0.12; 'wrote': 0.14; '"finally"': 0.16; 'clause.': 0.16; 'discussion.': 0.16; 'received:80.91.229.3': 0.16; 'received:plane.gmane.org': 0.16; 'return,': 0.16; 'print': 0.22; 'mind.': 0.24; 'header:X-Complaints-To:1': 0.27; 'raise': 0.29; '>>>>': 0.31; 'raised': 0.31; 'this.': 0.32; 'except': 0.35; 'something': 0.35; 'false': 0.36; 'to:addr:python-list': 0.38; 'rather': 0.38; 'does': 0.39; 'to:addr:python.org': 0.39; 'received:org': 0.40; 'most': 0.60; "you're": 0.61; "you'll": 0.62; 'happen': 0.63; 'finally': 0.65; 'finish': 0.65; 'returns.': 0.84; 'subject::': 0.85 X-Injected-Via-Gmane: http://gmane.org/ To: python-list@python.org From: Dave Angel Subject: Re:Try-except-finally paradox Date: Thu, 30 Jan 2014 07:05:15 -0500 (EST) Organization: news.gmane.org References: <9314ac52-a2be-4382-94ef-2c291f32be1a@googlegroups.com> X-Gmane-NNTP-Posting-Host: dpc6744192077.direcpc.com X-Newsreader: PiaoHong Usenet NewsReaders 1.36 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 34 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1391083371 news.xs4all.nl 2865 [2001:888:2000:d::a6]:59380 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:64986 Jessica Ross Wrote in message: > I found something like this in a StackOverflow discussion. >>>> def paradox(): > ... try: > ... raise Exception("Exception raised during try") > ... except: > ... print "Except after try" > ... return True > ... finally: > ... print "Finally" > ... return False > ... return None > ... >>>> return_val = paradox() > Except after try > Finally >>>> return_val > False > > I understand most of this. > What I don't understand is why this returns False rather than True. Does the finally short-circuit the return in the except block? > The finally has to happen before any return inside the try or the except. And once you're in the finally clause you'll finish it before resuming the except clause. Since it has a return, that will happen before the other returns. The one in the except block will never get reached. It's the only reasonable behavior., to my mind. -- DaveA