MySQL Connector/Python 发行说明
此异常是 errors
模块中所有其他异常的基类。它可用于在单个 except
语句中捕获所有错误。
以下示例展示了如何捕获语法错误
import mysql.connector
try:
cnx = mysql.connector.connect(user='scott', database='employees')
cursor = cnx.cursor()
cursor.execute("SELECT * FORM employees") # Syntax error in query
cnx.close()
except mysql.connector.Error as err:
print("Something went wrong: {}".format(err))
异常初始化支持几个可选参数,即 msg
、errno
、values
和 sqlstate
。所有参数都是可选的,默认值为 None
。errors.Error
在 Connector/Python 内部用于引发 MySQL 客户端和服务器错误,不应由您的应用程序用来引发异常。
以下示例展示了在不使用任何参数或组合使用这些参数时得到的结果
>>> from mysql.connector.errors import Error
>>> str(Error())
'Unknown error'
>>> str(Error("Oops! There was an error."))
'Oops! There was an error.'
>>> str(Error(errno=2006))
'2006: MySQL server has gone away'
>>> str(Error(errno=2002, values=('/tmp/mysql.sock', 2)))
"2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)"
>>> str(Error(errno=1146, sqlstate='42S02', msg="Table 'test.spam' doesn't exist"))
"1146 (42S02): Table 'test.spam' doesn't exist"
使用错误编号 1146 的示例在 Connector/Python 从 MySQL 服务器接收错误数据包时使用。信息将被解析并传递给 Error
异常,如所示。
每个从 Error
继承的异常类都可以使用之前提到的参数进行初始化。此外,每个实例都具有 errno
、msg
和 sqlstate
属性,您可以在代码中使用这些属性。
以下示例展示了如何在删除不存在的表时处理错误(当 DROP TABLE
语句不包含 IF EXISTS
子句时)
import mysql.connector
from mysql.connector import errorcode
cnx = mysql.connector.connect(user='scott', database='test')
cursor = cnx.cursor()
try:
cursor.execute("DROP TABLE spam")
except mysql.connector.Error as err:
if err.errno == errorcode.ER_BAD_TABLE_ERROR:
print("Creating table spam")
else:
raise
在 Connector/Python 1.1.1 之前,传递给 errors.Error()
的原始消息没有以可以检索的方式保存。相反,Error.msg
属性使用错误编号和 SQLSTATE 值进行格式化。从 1.1.1 开始,仅将原始消息保存在 Error.msg
属性中。格式化后的值以及错误编号和 SQLSTATE 值可以通过打印或获取错误对象的字符串表示来获得。示例
try:
conn = mysql.connector.connect(database = "baddb")
except mysql.connector.Error as e:
print "Error code:", e.errno # error number
print "SQLSTATE value:", e.sqlstate # SQLSTATE value
print "Error message:", e.msg # error message
print "Error:", e # errno, sqlstate, msg values
s = str(e)
print "Error:", s # errno, sqlstate, msg values
errors.Error
是 Python StandardError
的子类。