MySQL Connector/Python 發行說明
這個例外是 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"
當 Connector/Python 從 MySQL 伺服器接收到錯誤封包時,會使用錯誤號碼 1146 的範例。會剖析資訊並傳遞給 Error
例外,如所示。
每個從 Error
繼承的例外子類別都可以使用先前所述的引數初始化。此外,每個執行個體都有 errno
、msg
和 sqlstate
屬性,可以在您的程式碼中使用。
以下範例示範當刪除不存在的資料表時如何處理錯誤(當 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
的子類別。