2015-05-19 2 views
0

Когда я запускаю следующий doctest в Mac терминалОшибка при запуске + нормализуют WHITESPACE в doctest на Mac терминале

>>> import sys 
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9] 
... # doctest: +NORMALIZE_WHITESPACE 
[1, 2, 3, 
4, 5, 6, 
7, 8, 9] 
>>> sys.stdout.write("This text contains weird spacing.") 
... # doctest: +NORMALIZE_WHITESPACE 
This text contains weird spacing. 

я получаю следующий результат с «33» в конце, что делает этот тест потерпеть неудачу. Любая идея, как исправить это?

File "test2.txt", line 8, in test2.txt 
Failed example: 
    sys.stdout.write("This text contains weird spacing.") 
    # doctest: +NORMALIZE_WHITESPACE 
Expected: 
    This text contains weird spacing. 
Got: 
    This text contains weird spacing.33 
********************************************************************** 
1 items had failures: 
    1 of 3 in test2.txt 
***Test Failed*** 1 failures. 

ответ

1

sys.stdout.write это функция, которая возвращает количество символов, которое было написано. Перед возвратом, он записывает аргумент в консоль. Поэтому, когда вы вызываете sys.stdout.write("This text contains weird spacing."), строка записывается в консоль, а затем возвращается длина строки (33). Вот почему доктрист получает This text contains weird spacing.33.

Я предлагаю вам использовать print метод вместо:

>>> print("This text contains weird spacing.") 
... # doctest: +NORMALIZE_WHITESPACE 
This text contains weird spacing. 

Если вы должны использовать sys.stdout.write вы можете захватить возвращаемое значение, таким образом оно будет проигнорировано doctest. Пример:

>>> ln = sys.stdout.write("This text contains weird spacing.") 
... # doctest: +NORMALIZE_WHITESPACE 
This text contains weird spacing. 
+0

Спасибо! Я попробовал оба, и «>>> ln = sys.stdout.write (« Этот текст содержит странный интервал. »)« Работал, а «>>> print (« Этот текст содержит странный интервал »). 'Didn' т. – AtxTom

+0

@AtxTom, на мой взгляд, с помощью 'print' является более чистым. Я не могу представить, почему он не работает для вас. Вы можете выполнить пример [здесь] (http://goo.gl/IWrEYC). – asherbar