文档首页
MySQL Connector/Python 开发人员指南
相关文档 下载本手册
PDF (US Ltr) - 0.7Mb
PDF (A4) - 0.7Mb


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

异常初始化支持几个可选参数,即 msgerrnovaluessqlstate。所有参数都是可选的,默认值为 Noneerrors.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 继承的异常类都可以使用之前提到的参数进行初始化。此外,每个实例都具有 errnomsgsqlstate 属性,您可以在代码中使用这些属性。

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