January 27, 2009

История одного побочного эффекта

Столкнулся сегодня с одим преинтереснейшим побочным эффектом безобидного, казалось бы, действия. Говорили мне все тексты про Haskell, что сайд-эффекты это плохо, и не потому плохо, что они есть, а потому, что снаружи не видать.

Какое-то время назад я размышлял тут о проблеме перехвата консольного вывода от процессов. Чтобы всё заработало тогда я установил переменную окружения PYTHONUNBUFFERED в 1 и остался доволен полученным результатом. Некоторое время после этого Python не трогал, да и забыл вообще. И вот сегодня откликнулось!

Запускаю “manage.py syncdb” которое Django генерирует, так как запускаю на пустой базе, предлагают мне пользователя создать административного. И вопрос задают “yes” или “no”. По привычке отвечаю yes <Enter> – ничего. Снова тот же вопрос. Ладно, благо код открытый, чем разбираться в проблеме, проще её исправить на месте. Иду в исходники, убираю проверку условия. (Тут был небольшой казус с Вистой, но это совсем другая история.) Возвращаюсь к шагу №1 “manage.py syncdb”. Отлично! Никаких вопросов – просто “Введите имя пользователя”. Ввожу admin <Enter>. На этот раз invalid user name. Вроде как какие-то непечатные символы в имени пользователя. Но я то знаю, что их там нет!

Запускаем любимый редактор, пишем там мало-мало кода, дабы проверить догадку. Так и есть! Возврат каретки дописывается в конец строки. Надо сказать, что с момента начала всей эпопеи прошло уже порядочно времени, и поиск проблемы начинает утомлять. Дай, думаю, запущу interactive console. Сказано-сделано, запускаю, пишу 2+2 <Enter> и получаю, что бы вы думали?! SyntaxError! Шик блеск!

И главное, что все мои запросы в Google и Яндекс а-ля “strange behavior of pyhon on vista” вели вникуда. В конце концов с горя полез искать настройки символа перевода строки по умолчанию. Конечно, ничего такого не нашёл, потому как настройка шибко системная, но зато выполнил разок команду SET, которая и показала мне, что PYTHONUNBUFFERED стоит себе в уголочке скромной единичкой и мешает честному человеку дело делать.

Пожалуй, такой опыт сильнее любых многопроцессоров привьёт любовь к чистым функциям и стойкое отвращение к побочным эффектам.


This page is powered by Blogger. Isn't yours?