doctest 本地定义的函数

发布于 2024-08-24 12:10:18 字数 227 浏览 7 评论 0原文

有什么方法可以对本地定义的函数进行文档测试吗?举个例子,我不想

def foo():
  """ >>> foo()
  testfoo"""

  def foo2():
    """ >>> 1/0 """ 
    print 'testfoo'

  foo2()

通过测试。但我仍然不想让 foo2 成为整个模块的全局...

is there any way to doctest locally defined functions? As an example I would want

def foo():
  """ >>> foo()
  testfoo"""

  def foo2():
    """ >>> 1/0 """ 
    print 'testfoo'

  foo2()

to NOT pass the test. But still I would not want to make foo2 global for the entire module...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

七颜 2024-08-31 12:10:18

谢谢。我已经担心在文档字符串之外无法绕过代码。尽管如此,我仍然认为可能有一个技巧可以导入函数的局部变量,从而访问嵌套函数。无论如何,使用 Alex 方法的解决方案将是“

def foo(debug=False):
  """
     >>> foo()
     testfoo
     >>> foo(debug=True)
     """

  def foo2():
    """
       >>> 1/0"""
    print 'testfoo'


  if debug :
    import doctest
    for f in [foo2]: doctest.run_docstring_examples(f,locals())

  foo2()

现在唯一的问题是如何自动化这种方法,因此有类似

for f in locals().values(): doctest.run_docstring_examples(f,locals())

但没有导入和内置函数和变量的东西。

Thanks. I already feared there would be no way around code outside the docstring. Still I thought there might be a trick to import the locals of a function and thus get access to nested functions. Anyhow, a solution using Alex' approach would read

def foo(debug=False):
  """
     >>> foo()
     testfoo
     >>> foo(debug=True)
     """

  def foo2():
    """
       >>> 1/0"""
    print 'testfoo'


  if debug :
    import doctest
    for f in [foo2]: doctest.run_docstring_examples(f,locals())

  foo2()

Now the only question is how to automate this approach, so one has something like

for f in locals().values(): doctest.run_docstring_examples(f,locals())

but without the imported and built in functions and variables.

囍孤女 2024-08-31 12:10:18

你只是遇到了一个空格问题——如果你修复它,例如如下:

def foo():
  """
    >>> foo()
    testfoo"""

  def foo2():
    """ >>> 1/0 """ 
    print 'testfoo'

  foo2()

if __name__ == '__main__':
  import doctest
  doctest.testmod()

测试就很好地通过了。

You just have a whitespace problem -- if you fix it, for example as follows:

def foo():
  """
    >>> foo()
    testfoo"""

  def foo2():
    """ >>> 1/0 """ 
    print 'testfoo'

  foo2()

if __name__ == '__main__':
  import doctest
  doctest.testmod()

the test passes just fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文