我在尝试捕获错误时遇到问题.我正在使用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?"
Run Code Online (Sandbox Code Playgroud)
当我尝试时,我得到了同样的信息except exc.SQLAlchemyError(虽然我想捕捉到特定的错误而不是全部捕获).我也试过exc.IntegrityError但没有运气(虽然它存在于API中).
我的Python语法有什么问题,或者我需要在SQLAlchemy中做些什么才能捕获它?
我不知道如何解决这个问题,但我对可能导致问题的原因有一些想法.也许try语句没有失败但是成功,因为SQLAlchemy本身就引发了异常而Pyramid正在生成视图,因此except IntegrityError:永远不会被激活.或者,更有可能的是,我完全错误地抓住了这个错误.