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.