如何捕捉MySql插入异常:"1062 (23000):重复的条目",同时捕捉其他异常Python 3?

1 人关注

我正试图捕捉和计算重复输入的异常。

1062 (23000): Duplicate entry '' for key 'tabale.item_UNIQUE'

下面是产生重复项目异常的代码。

stmt='INSERT INTO table.items(item) VALUES("iteratorI");'
        mc.execute(stmt)
        conn.commit()
    except pymysql.IntegrityError as e:
        duplicateCounter=duplicateCounter+1
    except Exception as ee:
        otherErrors=otherErrors+1

我希望能够单独计算重复项目的例外情况,以保持对其他例外情况的计算。

我想确保我正在计算的异常是关于重复的条目,而不是其他。 另一个问题是,目前 duplicateCounter 的结果是零,尽管我得到了至少 10 个 1062 异常,这些异常被计入了 otherErrors 中。

2 个评论
你是否尝试过用 sys.exc_info() 来确定被抓的确切 Exception docs.python.org/3/library/sys.html#sys.exc_info Or even print(type(ee)) .
Max
我刚刚做了,这实际上解决了我的问题,尽管@booboo的答案早已经解决了这个问题
python
mysql
python-3.x
exception
Max
Max
发布于 2021-05-17
1 个回答
Booboo
Booboo
发布于 2021-05-17
已采纳
0 人赞同

你还没有真正说明你的担忧是什么。你是否担心 pymysql.IntegrityError 的异常可能是由重复键错误以外的其他原因引起的?如果是这个问题,你可以检查与该异常相关的错误代码是1062(DUP_ENTRY),如下。

stmt = 'INSERT INTO table.items(item) VALUES("iteratorI");'
    mc.execute(stmt)
    conn.commit()
except pymysql.IntegrityError as e:
    if e.args[0] == 1062:
        duplicateCounter += 1
except Exception as ee:
    otherErrors += 1