doctest environment question

tag thomas.guest at gmail.com
Tue May 22 03:21:06 EDT 2007


On 21 May, 22:17, Peter Otten <__pete... at web.de> wrote:
> If these don't work you'll have to give a bit more context.
>
> Peter

Thanks again Peter. Here's something much closer to what I really want
to do. You should be able to cut and paste this post into a file
"post.txt". Running the command `python -c "import doctest;
doctest.testfile('post.txt')"` gives a test failure even though
everything works fine in an interpreted Python session. I'd like to
find a way to make the doctest pass.

>>> def announce(f):
...     " Return a function which announces calls to the input
function. "
...     def wrapper(*v, **k):
...         print "Calling %s" % f.__name__
...         return f(*v, **k)
...     return wrapper

We can rebind a function to announce calls to it:

>>> def g(): pass
...
>>> g = announce(g)
>>> g()
Calling g

Or we can use decorator syntax:

>>> @announce
... def f(): pass
...
>>> f()
Calling f

Here's a function which rebinds a function at the top level of a
module (it won't work for nested functions).

>>> def announce_function(f):
...     " Rebind f within a module so that calls to f are announced. "
...     import inspect
...     setattr(inspect.getmodule(f), f.__name__, announce(f))

Let's give it a try. This next works fine in an interactive Python
session but fails when doctested.

>>> def h(): pass
...
>>> announce_function(h)
>>> h()
Calling h


Here's the doctest failure:

python -c "import doctest; doctest.testfile('post.txt')"
**********************************************************************
File "post.txt", line 37, in post.txt
Failed example:
    announce_function(h)
Exception raised:
    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/doctest.py", line 1212, in __run
        compileflags, 1) in test.globs
      File "<doctest post.txt[8]>", line 1, in <module>
        announce_function(h)
      File "<doctest post.txt[6]>", line 4, in announce_function
        setattr(inspect.getmodule(f), f.__name__, announce(f))
    AttributeError: 'NoneType' object has no attribute 'h'
**********************************************************************
File "post.txt", line 38, in post.txt
Failed example:
    h()
Expected:
    Calling h
Got nothing
**********************************************************************
1 items had failures:
   2 of  10 in post.txt
***Test Failed*** 2 failures.




More information about the Python-list mailing list