Уведомления

Группа в Telegram: @pythonsu

#1 Июль 31, 2015 11:42:36

nikbird
Зарегистрирован: 2015-07-31
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Изредка срабатывает лишний print

Привет форумчане!
Не профи в питоне, поэтому прошу вашей помощи.
Здесь http://pastebin.com/Gkcd6xUf пример скрипта.
В файле определена функция для преобразования строкового представления даты в datetime, а также функция, тестирующая вышеуказанную функцию. Проблема в том, что если запускать скрипт через терминал (я запускал из каталога со скриптом “python test.py”), периодически вместо последней пустой строки выводится случайная строка из выведенных раньше, а иногда даже выводится полностью командная строка. Никак не могу этого объяснить. Если кто-то сталкивался и знает причину, прощу дать знать. ОС Windows 7 x64, Python 2.7.9 x32.

Офлайн

#2 Июль 31, 2015 12:17:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Изредка срабатывает лишний print

from __future__ import print_function
from datetime import date, datetime
 
DATE_STR_FORMATS = {7: "%m.%Y", 10: "%d.%m.%Y", 16: "%d.%m.%Y %H:%M"}
 
def strToDatetime(dateStr):
    try:
        dateTime = datetime.strptime(dateStr, DATE_STR_FORMATS[len(dateStr)])
    except Exception:
        dateTime = None
    return dateTime
 
testList = ["05.2015", "01.06.2015", "01.12.2015 23:15", "12.12.99"]
 
for i in testList:
    print(strToDatetime(i))

Просто интерпретатор открой в командной строке и скопируй туда код.

Должно получиться:
>>> from __future__ import print_function
>>> from datetime import date, datetime
>>> 
>>> DATE_STR_FORMATS = {7: "%m.%Y", 10: "%d.%m.%Y", 16: "%d.%m.%Y %H:%M"}
>>> 
>>> def strToDatetime(dateStr):
...     try:
...         dateTime = datetime.strptime(dateStr, DATE_STR_FORMATS[len(dateStr)])
...     except Exception:
...         dateTime = None
...     return dateTime
... 
>>> testList = ["05.2015", "01.06.2015", "01.12.2015 23:15", "12.12.99"]
>>> 
>>> for i in testList:
...     print(strToDatetime(i))
... 
2015-05-01 00:00:00
2015-06-01 00:00:00
2015-12-01 23:15:00
None
>>>


nikbird
а также функция, тестирующая вышеуказанную функцию
Это велосипед, имитирующий функционал модуля unittest (посвежее).



Отредактировано py.user.next (Июль 31, 2015 12:20:42)

Офлайн

#3 Июль 31, 2015 12:36:30

nikbird
Зарегистрирован: 2015-07-31
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Изредка срабатывает лишний print

unittest это хорошо. Вопрос был совершенно другой.
Проблема в том, что если запускать скрипт через терминал (я запускал из каталога со скриптом “python test.py”), периодически вместо последней пустой строки выводится случайная строка из выведенных раньше. Т.е. последние 3 строки вывода должны быть такие:

1
2  Passed: 4
3

Однако при многократной запуске на месте строки 3 выводится случайная строка из ранее выведенных, например:
3 --------------     -------------------------  -------------------

Офлайн

#4 Июль 31, 2015 12:47:04

nikbird
Зарегистрирован: 2015-07-31
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Изредка срабатывает лишний print

С вышеприведенным кодом абсолютно аналогичная ситуация. Вместо последней пустой строки может появиться случайная строка, выведенная раньше.

Офлайн

#5 Июль 31, 2015 12:58:38

nikbird
Зарегистрирован: 2015-07-31
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Изредка срабатывает лишний print

Проверил вывод в терминале Linux. Никакой пустой строки в конце нет, как, собственно, и должно быть. Очень похоже на баг в терминале Windows.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version