10.12.2 errors.Error异常

此异常是 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))

初始化异常支持一些可选参数,即msgerrno和 。它们都是可选的,默认为. Connector/Python 在内部使用它来引发 MySQL 客户端和服务器错误,您的应用程序不应使用它来引发异常。 valuessqlstateNoneerrors.Error

以下示例显示了不使用参数或使用参数组合时的结果:

>>> 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"

当连接器/Python 从 MySQL 服务器接收到错误数据包时,使用错误号 1146 的示例。如图所示,信息被解析并传递给Error异常。

每个异常子类Error都可以使用前面提到的参数进行初始化。此外, 每个实例都有属性 errno,可以在您的代码中使用。 msgsqlstate

以下示例显示了删除不存在的表时如何处理错误(当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