无法在Python中捕获MySQL IntegrityError

时间:2014-11-25 20:10:38

标签: python mysql stored-procedures exception-handling sqlalchemy

我使用Python / Bottle / SqlAlchemy / MySQL作为网络服务。

我试图通过调用存储过程来捕获IntegrityError,但我无法做到。

使用此

cursor = connection.cursor()
cursor.callproc('my_stored_proc', [arguments])

产生与

相同的结果
try:
    cursor = connection.cursor()
    cursor.callproc('my_stored_proc', [arguments])
except IntegrityError as e:
    print("Error: {}".format(e))
    return {"message": e.message}

在这两种情况下我都会遇到IntegrityError异常。为什么在后一种情况下没有发现异常?

3 个答案:

答案 0 :(得分:10)

问题是我遇到了错误的异常。

事实证明,引发的错误实际上是pymysql.err.IntegrityError类型,而不是我假设的sqlalchemy.exc.IntegrityError。

我通过执行以下方式找到了异常类型:

import sys
try:
    cursor = connection.cursor()
    cursor.callproc('my_stored_proc', [arguments])
except:
    print "Unexpected error:", sys.exc_info()[0]

我看到了这个打印输出:

  

Unexpected error: <class 'pymysql.err.IntegrityError'>

答案 1 :(得分:0)

就我而言,也是您自己,您将使用sqlalchemy对象:

try:
    cursor = connection.cursor()
    cursor.callproc('my_stored_proc', [arguments])
except sqlalchemy.exc.IntegrityError as e:
    print("Error: {}".format(e))
    return {"message": e.message}

答案 2 :(得分:0)

就我而言,也许对您也有帮助,我使用MYSQL作为数据库,因此要捕获异常,我需要导入异常

from django.db.utils import IntegrityError

然后您可以尝试像这样捕获它

try:
    #your code
except IntegrityError:
    #your code when integrity error comes