Как правило, вы должны указывать ошибки, которые распространяются с помощью исключений. Если вы обнаружили ошибку по чему-то, что вы только что проверили, и вы можете немедленно устранить ее, нет необходимости выдавать исключение.
В частном случае установки, например, возврат False
или что-то еще не поможет. Установка переменных экземпляра, которые вы должны проверить, является очень неоптимальной, поскольку с тех пор вы можете пропустить ошибку при аварии.
print
обычно не является хорошим ответом на ошибку. В этом случае кажется, что вы хотите сказать конечному пользователю, что ему нужно использовать другой пароль. Похоже, вы должны вызвать метод, который заставляет веб-страницу с формой объяснить пользователю, что пошло не так; Вы можете вызвать метод, который делает это в вашем классе, или вызвать исключение, которое будет распространяться и в конечном итоге будет перехвачено и использовано для этой цели. (Это общий совет. Я не знаю достаточно о Pylons, чтобы рассказать вам, как он этого хочет.)
Вы не должны поднимать свои NameError
исключения. NameError
prettymuch всегда указывает на опечатку в вашей программе, и поэтому вы обычно не хотите ее отлавливать. Поймав это, вы вносите ненужную неопределенность в программу. Похоже, это может быть что-то более похожее на ValueError
или его подкласс (class InvalidPasswordError(ValueError): pass
).
Я не понимаю, почему вы проверяете TypeError
. Вы всегда должны понимать, что вызвало бы исключение, которое вы поймали. Если вы делаете в этом случае, это здорово; Я не могу понять, какую ошибку вызовет TypeError
, с которой вы могли бы разумно разобраться, предложив пользователю.
Ваша техника получения пароля в виде открытого текста и хранения его хеша md5 не очень безопасна. Вам следует рассмотреть что-то вроде AuthKit, которое может сделать этот процесс более безопасным и абстрагированным.