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