【发布时间】:2012-07-04 01:31:16
【问题描述】:
我在尝试捕获错误时遇到问题。我正在使用 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: 永远不会被激活。或者,更有可能的是,我完全错误地理解了这个错误。
【问题讨论】:
-
你从哪里导入
IntegrityError?你确定这是正确的吗?你能告诉我们回溯吗? -
@FogleBird 我不是最擅长捕捉错误,所以我想如果它引发 IntegrityError,那么我可以在不导入任何内容的情况下捕捉它(我认为它只是一个名称)。我确实尝试了我从 SQLAlchemy 导入的答案中的两个命令。我不知道如何显示引用,这是一个很长的网页,基本上说电子邮件地址不是唯一的。
标签: python sqlalchemy pyramid