У меня проблемы с попыткой поймать ошибку. Я использую Pyramid/SQLAlchemy и создал форму регистрации с электронной почтой в качестве первичного ключа. Проблема в том, что когда вводится дубликат электронной почты, он вызывает IntegrityError, поэтому я пытаюсь поймать эту ошибку и предоставить сообщение, но что бы я ни делал, я не могу ее поймать, ошибка продолжает появляться.
try:
new_user = Users(email, firstname, lastname, password)
DBSession.add(new_user)
return HTTPFound(location = request.route_url('new'))
except IntegrityError:
message1 = "Yikes! Your email already exists in our system. Did you forget your password?"
Я получаю то же сообщение, когда пытаюсьexcept exc.SQLAlchemyError
(хотя я хочу ловить конкретные ошибки, а не все сразу ). Я также пробовал exc.IntegrityError
, но безуспешно (, хотя он существует в API ).
Что-то не так с моим синтаксисом Python, или мне нужно сделать что-то особенное в SQLAlchemy, чтобы поймать его?
Я не знаю, как решить эту проблему, но у меня есть несколько идей о том, что может быть причиной проблемы. Возможно, оператор try не терпит неудачу, а завершается успешно, потому что SQLAlchemy сама вызывает исключение, а Pyramid генерирует представление, поэтому except IntegrityError:
никогда не активируется. Или, что более вероятно, я совершенно неправильно ловлю эту ошибку.