Bugs item #1337990, was opened at 2005-10-25 22:18 Message generated for change (Comment added) made by tim_one You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1337990&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: Documentation Group: None >Status: Closed >Resolution: Fixed Priority: 5 Submitted By: Tim Wegener (twegener) >Assigned to: Nobody/Anonymous (nobody) Summary: doctest mishandles exceptions raised within generators Initial Comment: If a generator raises an exception while iterating over it, doctest will only register the exception output, and will miss output that occurred during previous loop iterations. The following code clarifies and reproduces the problem: (also included as an attachment) """Reproduce bug with exceptions in a generator in doctest tests. This bug has been seen to occur in: Linux (RH9): Python 2.4.1 Python 2.3.5 Python 2.2.2 (using from __future__ import generators) Windows XP: Python 2.4.2 Python 2.3.5 """ def error_generator(): """Yield 0 to 2 and then try and raise an exception. >>> for j in error_generator(): ... print j 0 1 2 Traceback (most recent call last): Exception: Contrived exception for sake of example """ # Note: This is obviously a contrived example of generator use. for i in range(3): yield i if 1: raise Exception("Contrived exception for sake of example") raise StopIteration if __name__ == '__main__': # Run the doctest tests. import sys import doctest doctest.testmod(sys.modules['__main__']) print print 'What should have happened...' for j in error_generator(): print j ---------------------------------------------------------------------- >Comment By: Tim Peters (tim_one) Date: 2006-04-23 22:13 Message: Logged In: YES user_id=31435 doctest doesn't support mixing "expected normal output" with an exception, regardless of how such a thing may arise. For example, this one-liner can't work either as a doctest: >>> print 'hi', 1/0 hi Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero So there's nothing specific to generators in this, rather it's a doctest limitation. The docs do say, wrt testing exceptions: """ No problem, provided that the traceback is the only output produced by the example: just paste in the traceback. """ In any case, it wasn't intended that doctest support this, and the docs do try to communicate that. I added text spelling out the other half (if there's expected output in addition to the traceback, problem ;-)), in rev 45677 on the trunk and rev 45678 on the 2.4 branch, and am closing this report as a doc bug. Edward Loper tried supporting this, as a new feature, before 2.4 was released, but it so grossly complicated the docs and the implementation that we agreed to drop it. So you could re-open this as a feature request, but it's unlikely to change. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1337990&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com