doctest локально определенные функции

там какой-либо путь к doctest локально определенным функциям? Как пример я хотел бы

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

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

  foo2()

НЕ пройти тест. Но тем не менее я не хотел бы делать foo2 глобальный для всего модуля...

8
задан Ivan Lappo-Danilevski 8 March 2010 в 17:25
поделиться

2 ответа

У вас просто проблема с пробелами - если вы исправите их, например, так:

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

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

  foo2()

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

тест пройдет нормально.

1
ответ дан 5 December 2019 в 23:14
поделиться

Спасибо. Я уже опасался, что кода вне строки документации не будет. Тем не менее я подумал, что может быть уловка, чтобы импортировать локальные переменные функции и, таким образом, получить доступ к вложенным функциям. Во всяком случае, решение, использующее подход Алекса, будет читать

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())

, но без импортированных и встроенных функций и переменных.

4
ответ дан 5 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: