首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行Python doctest代码

执行Python doctest代码
EN

Stack Overflow用户
提问于 2015-08-09 17:32:17
回答 1查看 1.2K关注 0票数 1

我有一个简单的Python代码,它使用的是

代码语言:javascript
复制
#!/usr/bin/python
# http://stackoverflow.com/questions/2708178/python-using-doctests-for-classes

class Test:
    def __init__(self, number):
        self._number=number

    def multiply_by_2(self):
        """
        >>> t.multiply_by_2()
        4
        """
        return self._number*2

if __name__ == "__main__":
    import doctest
    doctest.testmod(extraglobs={'t': Test(2)})

我可以在python解释器中使用它:

代码语言:javascript
复制
> python simple.py

但是,当我从doctest模块执行代码时,会得到以下错误:

代码语言:javascript
复制
> python -m doctest simple.py
**********************************************************************
File "simple.py", line 10, in simple.Test.multiply_by_2
Failed example:
    t.multiply_by_2()
Exception raised:
    Traceback (most recent call last):
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/doctest.py", line 1289, in __run
        compileflags, 1) in test.globs
      File "<doctest simple.Test.multiply_by_2[0]>", line 1, in <module>
        t.multiply_by_2()
    NameError: name 't' is not defined
**********************************************************************
1 items had failures:
   1 of   1 in simple.Test.multiply_by_2
***Test Failed*** 1 failures.

为什么会有这种区别呢?如何解决这一问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-09 17:37:32

区别在于,当您通过doctest执行时,相对于直接执行脚本的if __name__ == '__main__'块,它是__main__模块。

除了将所需的所有信息放入docstring本身之外,我不知道有一个好的解决方案:

代码语言:javascript
复制
def multiply_by_2(self):
    """
    >>> t = Test(2)
    >>> t.multiply_by_2()
    4
    """
    return self._number * 2

这将带来额外的好处,即读取您的文档字符串的用户将知道发生了什么.他们不必偶然发现您的extraglobs关键字,以确定t是什么以及它是如何初始化的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31906946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档