Spec-Zone.ru › MySQL Connectors 1.0

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

Инициализация исключения поддерживает несколько необязательных аргументов, а именно 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, которые могут быть использованы в вашем коде.

Следующий пример демонстрирует, как обрабатывать ошибки при удалении несуществующей таблицы (когда оператор не включает в себя 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.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-python-en/connector-python-api-errors-error.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API