Попытка поймать ошибку целостности с помощью SQLAlchemy

У меня проблемы с попыткой поймать ошибку. Я использую 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:никогда не активируется. Или, что более вероятно, я совершенно неправильно ловлю эту ошибку.

17
задан Rod 28 March 2013 в 15:17
поделиться