我在尝试捕获错误时遇到问题。我正在使用 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:
永远不会被激活。或者,更有可能的是,我完全错误地理解了这个错误。