文件首頁
MySQL Connector/Python 開發者指南
相關文件 下載本手冊
PDF (美式信紙) - 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"

當 Connector/Python 從 MySQL 伺服器接收到錯誤封包時,會使用錯誤號碼 1146 的範例。會剖析資訊並傳遞給 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 的子類別。