Bugs item #1754456, was opened at 2007-07-16 00:17 Message generated for change (Comment added) made by tebeka You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1754456&group_id=5470
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Python Interpreter Core Group: Python 2.5 >Status: Closed Resolution: None Priority: 5 Private: No Submitted By: Miki Tebeka (tebeka) Assigned to: Nobody/Anonymous (nobody) Summary: "yield" causes strange behaviour Initial Comment: Running the attached files produces: ONE PASS However if you uncomment line 46 and run the file again, you don't get any output. A pdb session of the file produces: [EMAIL PROTECTED]:python-bug - 14:14] $pdb yield.py > /home/mtebeka/work/python-bug/yield.py(3)<module>() -> from imaplib import IMAP4 (Pdb) b 72 Breakpoint 1 at /home/mtebeka/work/python-bug/yield.py:72 (Pdb) c > /home/mtebeka/work/python-bug/yield.py(72)main() -> one_pass() (Pdb) s --Call-- /usr/local/lib/python2.5/bdb.py:318: RuntimeWarning: tp_compare didn't return -1 or -2 for exception i = max(0, len(stack) - 1) The program finished and will be restarted > /home/mtebeka/work/python-bug/yield.py(3)<module>() -> from imaplib import IMAP4 (Pdb) q [EMAIL PROTECTED]:python-bug - 14:15] $ (Sorry for the length of the example, this is the smaller version that still reproduces the bug) ---------------------------------------------------------------------- >Comment By: Miki Tebeka (tebeka) Date: 2007-07-16 16:05 Message: Logged In: YES user_id=358087 Originator: YES OUCH, forgot about that sorry. Closing. ---------------------------------------------------------------------- Comment By: Raymond Hettinger (rhettinger) Date: 2007-07-16 10:51 Message: Logged In: YES user_id=80475 Originator: NO Miki, I don't see a bug here. The presence of "yield" is significant during compilation not just when the line is executed. When the yield appears anywhere in a function body, it is not a function anymore, it is a generator. So, when the "yield" is uncommented, the call to one_pass returns a generator which doesn't start running until its next() method is called. In contrast, when the "yield" is commented, you have a function that starts running immediately when one_pass() is called. Here is a simplified comparison of the generator versus function: >>> def one_pass(): ... print 'running' ... yield 1 ... >>> g = one_pass() >>> g.next() running 1 >>> def one_pass(): ... print 'running' ... # yield 1 ... >>> one_pass() running If you still see a bug, please elaborate. If not, please close this report. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1754456&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com