Документы Python: тест на отсутствие

Используя Python 2.7, я пытаюсь проверить, что результат вызова конкретной функции равен None

Я ожидал, что эти тесты пройдут (извините за довольно глупый пример)

def six_or_none(val):
    """
    >>> six_or_none(6)
    6
    >>> six_or_none(4)
    None
    """
    if val == 6:
        return 6
    return None

Однако они дают следующий результат

Failed example:
    six_or_none(4)
Expected:
    None
Got nothing

Как правильно проверить отсутствие в документах?


person robert_b_clarke    schedule 18.11.2013    source источник


Ответы (3)


Интерпретатор Python игнорирует None возвращаемые значения, поэтому тесты документации делают то же самое.

Вместо этого проверьте is None:

>>> six_or_none(4) is None
True
person Martijn Pieters    schedule 18.11.2013
comment
Мартейн, знаете ли вы причины игнорирования None? - person Edgar Aroutiounian; 18.11.2013
comment
@EdgarAroutiounian: None - это значение по умолчанию, я должен возвращать что-то, но если бы мне разрешили ничего не возвращать, я бы сделал это, чтобы вернуть значение. - person Martijn Pieters; 18.11.2013
comment
@EdgarAroutiounian: Вы бы никогда не закончили читать все None выходы, если бы повторили их. - person Martijn Pieters; 18.11.2013
comment
Интересно, почему doctest не рассматривает как пустой ожидаемый результат, состоящий исключительно из строки None; возможно, принцип состоит в том, чтобы не удивить пользователя, который вручную проверяет задокументированный пример в интерактивном интерпретаторе? - person benjimin; 18.08.2020

Другой вариант - прямая проверка None:

def six_or_none(val):
    """
    >>> six_or_none(6)
    6
    >>> six_or_none(4)
    """
    if val == 6:
        return 6
    return None
person alko    schedule 03.12.2013

Другой альтернативой, если вы хотите что-то, что выглядит так, как вы могли бы ожидать в своих документах, является:

>>> print(six_or_none(4))
None
person Sam Martin    schedule 25.12.2020