Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2009 18:22:57

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Антипаттерны

О, интересно. Надо будет поковыряться.
И да, злоупотреблять значениями по умолчанию не стоит - я заметил, что могут появится неочевидные проблемы. Теперь использую только тогда, когда значение по умолчанию необходимо.

Но больше проблем у меня, из-за неумения писать тесты к программе :(
Я скорее не совсем понимаю подход, и как результат, не пишу их. В том виде, в котором я себе представляю их использование, мне они не кажутся сильно удобными или полезными.

Отредактировано (Март 2, 2009 18:23:22)

Офлайн

#2 Март 2, 2009 18:33:37

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Антипаттерны

Ferroman
Я скорее не совсем понимаю подход, и как результат, не пишу их.
http://www.google.com.ua/search?hl=uk&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=aLB&q=%D0%9C%D0%B0%D0%B9%D0%B5%D1%80%D1%81+%D0%93.%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE+%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC&btnG=%D0%9F%D0%BE%D1%88%D1%83%D0%BA&meta=

прекрасна книжка на 200 сторінок. вчить як тестувати програми. дуже зрозуміло написана без всяких розумних слів.



Офлайн

#3 Март 2, 2009 18:39:28

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Антипаттерны

Ferroman
Но больше проблем у меня, из-за неумения писать тесты к программе :(
Я скорее не совсем понимаю подход, и как результат, не пишу их. В том виде, в котором я себе представляю их использование, мне они не кажутся сильно удобными или полезными.
Свяжись со мной, попытаюсь привести примеры (у меня гталк часто онлайн). Если есть конкретные вопросы, то лучше в форуме.



Отредактировано (Март 2, 2009 18:41:59)

Офлайн

#4 Март 2, 2009 19:18:51

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Антипаттерны

crchemist
Дякую, почитаю.
j2a
Спасибо! Не люблю мучать людей абстрактными вопросами о вещах прикладного характера :) Сформулирую вопросы конкретнее, напишу на форуме - другим тоже будет что почитать, а может и сказать :)

Офлайн

#5 Март 3, 2009 00:37:01

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Антипаттерны

j2a
ну положим, там где ошибка значений – в тему ValueError/TypeError. AssertionError в этом случае не в кассу.
Соврешенно верно - архитектура приложения вполне может быть такой, что ValueError и AssertionError, что называется, “две большие разницы”
Идея заменить raise ValueError основывалась на предположение, что исключение выбрасывается чтобы заменить неочевидное исключение, которое неизбежно будет выброшенно в ходе дальнейшего выполнения программы (таким куском кода, как re.compile(None), например).
То есть, фактически, эта проверка делается для отладки (для этого assert и нужен), а по ее окончании необходимость проверки должна отпасть, в силу того, что отлаженный код никогда не допустит значения None для паттерна (да-да, выброс исключения - форс-мажор, в большинстве случаев после такой ситуации нужно только залогировать ошибку и прекратить выполнение программы либо в целом, либо упавшей ее части), но к этому мы еще вернемся.
Итак, вместо чуда инженерной мысли
def doQueryString(self,pattern=None):
if (self.CheckPolis(pattern)==False)or(pattern==None):
raise ValueError("I need not null object 'polis' !")
У нас появляется (как правильно заметил j2a, обязательно с пояснением!)
assert pattern, 'Pattern had to be a non-empty string, got %s instead' %pattern
или, в случае, если пустая строка в качестве шаблона все-таки разрешена
assert isinstance(pattern, basestring), 'Pattern had to be a string, got %s instead' %pattern
или какая-нибудь еще заковыристая проверка, если в ней есть необходимость.

Теперь assert, в случае, если что-то пойдет не так, добросовестно разъяснит, в чем же возникла проблема. Но! здесь всплывает главное отличие assert от raise AssertError - assert сработает, только если переменная __debug__ == True. Т.е. сработает в стандартном режиме запуска интерпретатора, но ни в случае, если питон запущен с оптимизацией!
В этом-то и проявляется сокральная отладочная сущность ассертов. Отсюда и их область применимости - их назначение только перехватить ошибку и вывести ее в более понятом представлении.
В принципе, ситуация схожа с warnings, когда превращая их в обычные исключения, можно сильно ускорить процесс разработки в отладочном режиме.



Отредактировано (Март 3, 2009 01:03:35)

Офлайн

#6 Март 3, 2009 01:26:07

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Антипаттерны

ZAN
Отличное пояснение, спасибо, интересно.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version