[ python-Bugs-1337990 ] doctest mishandles exceptions raised within generators
SourceForge.net
noreply at sourceforge.net
Mon Apr 24 04:13:58 CEST 2006
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
More information about the Python-bugs-list
mailing list