Doctest функции для составления списка квадратов

Я пытаюсь определить функцию для возврата квадратов для целых чисел в заданном диапазоне:

#this is my code

def squares(start, end):
    """
    Given the starting and ending numbers,
    return a list of the squares of the numbers from start to end.

    >>>squares(1, 5)
    [1, 4, 9, 16, 25]
    >>>squares(2, 4)
    [4, 9, 16]
    >>>squares(0, 1)
    [0, 1]
    >>>squares(0, 2)
    [0, 1, 4]
    """
    return [i**2 for i in range(start, end+1)]

if __name__ == "__main__":
    import doctest
    doctest.testmod(verbose=True, optionflags=doctest.NORMALIZE_WHITESPACE)

Это вызывает около 30 других ошибок, и я не знаю, как это исправить.

    ValueError: line 5 of the docstring for __main__.squares lacks blank after >>>: '>>>squares(1, 5)'

person Joe Chagnon    schedule 12.08.2014    source источник


Ответы (1)


Исправление ошибки

Просто добавьте пробелы:

def squares(start, end):
    """
    Given the starting and ending numbers,
    return a list of the squares of the numbers from start to end.

    >>> squares(1, 5)
    [1, 4, 9, 16, 25]
    >>> squares(2, 4)
    [4, 9, 16]
    >>> squares(0, 1)
    [0, 1]
    >>> squares(0, 2)
    [0, 1, 4]
    """
    return [i**2 for i in range(start, end+1)]

if __name__ == "__main__":
    import doctest
    doctest.testmod(verbose=True, optionflags=doctest.NORMALIZE_WHITESPACE)

Как читать трассировку стека Python

Чтение трассировки стека Python может быть сложным. Во-первых, обратите внимание, что он не генерирует «около 30 других ошибок». Python останавливается при первой же ошибке. В этом случае ошибка:

ValueError: line 5 of the docstring for __main__.squares lacks blank after >>>: '>>>squares(1, 5)'

Он говорит вам добавить пробел между >>> и командой squares(1, 5).

Остальные запутанные строки указывают путь, по которому python пришел к этой ошибке. Давайте посмотрим на первые несколько строк:

Traceback (most recent call last):
  File "sq.py", line 20, in <module>
    doctest.testmod(verbose=True, optionflags=doctest.NORMALIZE_WHITESPACE)
  File "/usr/lib/python2.7/doctest.py", line 1885, in testmod
    for test in finder.find(m, name, globs=globs, extraglobs=extraglobs):
  File "/usr/lib/python2.7/doctest.py", line 900, in find
    self._find(tests, obj, name, module, source_lines, globs, {})

Эти строки не являются отдельными ошибками. Они рассказывают, как python достиг строки, выдавшей ошибку. Во-первых, он говорит, что python выполнял строку 20 вашего файла sq.py, которая вызывала doctest.testmod. Оттуда он перешел к строке 1885 из doctest.py, которая вызвала строку 900 из doctest.py и так далее.

person John1024    schedule 12.08.2014