如何掌握Python異常處理問題
想要充分的掌握Python異常處理這門知識,那么就要對Python語言中的結構、語句、變量、函數(shù)、預處理指令、輸入和輸出等內(nèi)容進行了解掌握,這樣才可以輕輕松松的進行Python異常處理問題地解決。
下面介紹Python異常處理。導入必要的模塊之后,animal.py使用connect()調(diào)用建立到服務器的連接。為了處理連接故障,比如,顯示故障的原因,該腳本必須捕捉異常。在Python語言中,為了處理異常,必須把代碼放到try語句中,并且包括一個except子句來包含錯誤處理代碼。生成的連接的代碼如下所示:
- try:
 - conn = MySQLdb.connect (host = "localhost",
 - user = "testuser",
 - passwd = "testpass",
 - db = "test")
 - except MySQLdb.Error, e:
 - print "Error %d: %s" % (e.args[0], e.args[1])
 - sys.exit (1)
 
Except子句中的異常類MySQLdb.Error用于取得MySQLdb可以提供的具體數(shù)據(jù)庫錯誤信息,而變量e則用來存放錯誤信息。如果出現(xiàn)異常,MySQLdb會把有關信息存入e.args——這是一個包含錯誤代碼和描述該錯誤的字符串組成的雙元素元組。在本例中,except子句會打印這些值,然后退出。
任何數(shù)據(jù)庫有關的語句都可以放入類似的try/except結構中來收集和報告錯誤,為了簡便起見,后面的討論中不再顯示異常處理代碼。接下來介紹用于發(fā)送語句的方法。Animal.py接下來的代碼將創(chuàng)建一個游標對象,并利用它發(fā)送設置和填充動物表的語句。這部分代碼如下所示:需要注意的是,這里的代碼沒有包含錯誤檢查。
- CREATE TABLE animal
 - (
 - name CHAR(40),
 - category CHAR(40)
 - ) 本例中的表和一些語句取自于PEAR DB的說明文檔。腳本animal.py的開頭部分如下所示,從#!行可以看出它是打算運行于UNIX系統(tǒng)的:
 - #!/usr/bin/python
 - # animal.py - 創(chuàng)建動物表并從中檢索信息
 - import sys
 - conn = MySQLdb.connect (host = "localhost",
 - user = "testuser",
 - passwd = "testpass",
 - db = "test")
 - except MySQLdb.Error, e:
 - print "Error %d: %s" % (e.args[0], e.args[1])
 - sys.exit (1) Except子句中的異常類MySQLdb.Error用于取得MySQLdb可以提供的具體數(shù)據(jù)庫錯誤信息,而變量e則用來存放錯誤信息。
 - 如果出現(xiàn)異常,MySQLdb會把有關信息存入e.args——這是一個包含錯誤代碼和描述該錯誤的字符串組成的雙元素元組。在本例中,except子句會打印這些值,然后退出。
 - 任何數(shù)據(jù)庫有關的語句都可以放入類似的try/except結構中來收集和報告錯誤,
 - 為了簡便起見,后面的討論中不再顯示異常處理代碼。
 - 接下來介紹用于發(fā)送語句的方法。Animal.py接下來的代碼將創(chuàng)建一個游標對象,并利用它發(fā)送設置和填充動物表的語句。這部分代碼如下所示:
 - cursor = conn.cursor ()
 - cursor.execute ("DROP TABLE IF EXISTS animal")
 - cursor.execute ("""
 - CREATE TABLE animal
 - (
 - name CHAR(40),
 - category CHAR(40)
 - )
 - """)
 - cursor.execute ("""
 - INSERT INTO animal (name, category)
 - VALUES
 - ('snake', 'reptile'),
 - ('frog', 'amphibian'),
 - ('tuna', 'fish'),
 - ('racoon', 'mammal')
 - """)
 - print "Number of rows inserted: %d" % cursor.rowcount
 
請記住,Python異常處理可以放入try語句,這樣一旦出錯就會觸發(fā)異常,繼而被except子句所捕獲并處理。但是考慮到代碼的可讀性,我們這里只給出了代碼的主干部分。上面的語句將完成以下動作:
◆動物表已經(jīng)存在,則丟棄它。
◆創(chuàng)建動物表。
◆向表中插入一些數(shù)據(jù),并報告添加的行數(shù)。
這些語句都是通過調(diào)用游標對象的execute()方法發(fā)出的。其中前兩個execute()語句不會生成數(shù)據(jù),但是第三個語句將生成一個表示已經(jīng)插入行數(shù)的統(tǒng)計量。這個統(tǒng)計數(shù)字存放在游標的rowcount屬性中。有些數(shù)據(jù)庫接口是通過execution運行調(diào)用的返回值來提供這個統(tǒng)計數(shù)字的,但是DB-API卻不是這樣。
此動物表已經(jīng)建好,所以我們可以發(fā)出選擇指令來從中檢索信息了。如同前面的語句一樣,SELECT語句也要使用execute()方法發(fā)出。然而,與DROP或者INSERT語句不同的是,SELECT語句會生成一個結果集合,也就是說,execute()僅僅發(fā)出語句,但是卻沒有返回結果集合。
我們可以使用fetchone()方法每次返回一行數(shù)據(jù),或者使用fetchall()方法一次全部搞定。在animal.py中,這兩者方法都用到了。下面是如何使用fetchone()每次檢索一行數(shù)據(jù)的方法。















 
 
 





 
 
 
 