企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 处理错误 > 原文: [https://thepythonguru.com/handling-errors/](https://thepythonguru.com/handling-errors/) * * * 于 2020 年 1 月 7 日更新 * * * 与数据库交互是一个容易出错的过程,因此我们必须始终实现某种机制来优雅地处理错误。 MySQLdb 具有`MySQLdb.Error`异常,这是一个顶级异常,可用于捕获`MySQLdb`模块引发的所有数据库异常。 ```py from __future__ import print_function import MySQLdb as my try: db = my.connect(host="127.0.0.1", user="root", passwd="", db="world" ) cursor = db.cursor() sql = "select * from city" number_of_rows = cursor.execute(sql) print(number_of_rows) db.close() except my.Error as e: print(e) except : print("Unknown error occurred") ``` ## MySQLdb 中的两个主要错误 * * * 需要注意的是,MySQLdb 中有两类异常类: 1. `DatabaseError` 2. `InterfaceError` * * * 1. **`DatabaseError`**:当数据处理中存在问题,sql 语法错误,mysql 内部问题时,引发此异常。 如果建立连接并且出现问题,则`DatabaseError`会捕获到它。 2. **`InterfaceError`**:当由于某种原因数据库连接失败时,MySQLdb 将引发`InterfaceError`。 注意`InterfaceError`仅在与数据库连接存在内部问题时才引发,MySQLdb 不会因错误的数据库名称或密码而引发`InterfaceError`。 `DatabaseError`进一步分为 6 种类型: 1. `DataError` 2. `InternalError` 3. `IntegrityError` 4. `OperationalError` 5. `NotSupportedError` 6. `ProgrammingError` * * * 1. **`DataError`**:当数据处理出现问题时,例如除以零,范围的数值,MySQLdb 会引发此错误。 2. **`InternalError`**:当 MySQL 数据库本身存在一些内部错误时,引发此异常。 例如无效的游标,事务不同步等。 3. **`IntegrityError`**:当外键检查失败时,引发此异常。 4. **`OperationalError`**:对于不受程序员控制的事情,会引发此异常。 例如,意外断开连接,内存分配错误等,所选数据库不存在。 5. **`NotSupportedError`**:当存在不支持的方法或 api 时,引发此异常。 6. **`ProgrammingError`**:引发此编程错误。 例如找不到表,mysql 语法错误,指定的参数数量错误等。 ```py from __future__ import print_function import MySQLdb as my try: db = my.connect(host="127.0.0.1", user="root", passwd="", db="world" ) cursor = db.cursor() sql = "select * from city" number_of_rows = cursor.execute(sql) print(number_of_rows) db.close() except my.DataError as e: print("DataError") print(e) except my.InternalError as e: print("InternalError") print(e) except my.IntegrityError as e: print("IntegrityError") print(e) except my.OperationalError as e: print("OperationalError") print(e) except my.NotSupportedError as e: print("NotSupportedError") print(e) except my.ProgrammingError as e: print("ProgrammingError") print(e) except : print("Unknown error occurred") ``` 在下一篇文章中,我们讨论[如何从数据库](/fetching-records-using-fetchone-and-fetchmany/)中获取特定的行数。 * * * * * *