Doctest для вложенной строки документа

#python #doctest #docstring

#python #doctest #строка документа

Вопрос:

Предположим, у меня есть следующий код:

 def foo(s):
    """A dummy function foo. For example:

>>> a = '''This is a test string line 1
This is a test string line 2
This is a test string line 3'''
>>> foo(a)
This is a test string line 1
This is a test string line 2
This is a test string line 3
>>>
    """
    print s

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

И давайте сохраним это как foo.py. Когда я запускаю:

 C:Python27>python.exe foo.py
**********************************************************************
File "foo.py", line 5, in __main__.foo
Failed example:
    a = '''This is a test string line 1
Exception raised:
    Traceback (most recent call last):
      File "C:Python27libdoctest.py", line 1254, in __run
        compileflags, 1) in test.globs
      File "<doctest __main__.foo[0]>", line 1
        a = '''This is a test string line 1
                                          ^
    SyntaxError: EOF while scanning triple-quoted string literal
**********************************************************************
File "foo.py", line 8, in __main__.foo
Failed example:
    foo(a)
Exception raised:
    Traceback (most recent call last):
      File "C:Python27libdoctest.py", line 1254, in __run
        compileflags, 1) in test.globs
      File "<doctest __main__.foo[1]>", line 1, in <module>
        foo(a)
    NameError: name 'a' is not defined
**********************************************************************
1 items had failures:
   2 of   2 in __main__.foo
***Test Failed*** 2 failures.
  

Попробовали сделать отступ в строке документа ( >>> a = «‘…»‘. Проверили все отступы — по 4 пробела для каждого отступа) и заменили одинарную кавычку на двойную кавычку (>>> a = «»»….»»»), ошибки разные, и doctest просто не пройдет успешно. В настоящее время единственное, что работает, — это объединить все строки в чрезвычайно длинную строку и разделить с помощью ‘r n’.

Я что-то пропустил?

Ответ №1:

Я думаю, вам нужно поставить там несколько точек

 >>> a = """This is a test string line 1
... This is a test string line 2
... This is a test string line 3"""
  

Комментарии:

1. хотя я не могу показать большой палец (требуется репутация 15), спасибо за ваш ответ. Ваш ответ работает отлично.

2. Я просто хочу упомянуть, что doctest необходимо заключать в двойные кавычки. В ответе строка документа заключена в одинарную кавычку. Мой doctest был заключен в одинарные кавычки, и я не мог понять, почему он не работает.

3. @Forethinker: спасибо! Кстати, этот сайт редактируется совместно, когда вы видите очевидную ошибку, не стесняйтесь редактировать сообщение и исправлять его.

4. @Forethinker У меня было наоборот; у меня была строка результата моего doctest в двойных кавычках, в то время как она должна была быть в одинарных кавычках.