python學習筆記 異常

2021-09-06 03:42:00 字數 4531 閱讀 4299

baseexception

+-- systemexit

+-- keyboardinterrupt

+-- generatorexit

+-- exception

+-- stopiteration

+-- standarderror

| +-- buffererror

| +-- arithmeticerror

| | +-- floatingpointerror

| | +-- overflowerror

| | +-- zerodivisionerror

| +-- assertionerror

| +-- attributeerror

| +-- environmenterror

| | +-- ioerror

| | +-- oserror

| | +-- windowserror (windows)

| | +-- vmserror (vms)

| +-- eoferror

| +-- importerror

| +-- lookuperror

| | +-- indexerror

| | +-- keyerror

| +-- memoryerror

| +-- nameerror

| | +-- unboundlocalerror

| +-- referenceerror

| +-- runtimeerror

| | +-- notimplementederror

| +-- syntaxerror

| | +-- indentationerror

| | +-- taberror

| +-- systemerror

| +-- typeerror

| +-- valueerror

| +-- unicodeerror

| +-- unicodedecodeerror

| +-- unicodeencodeerror

| +-- unicodetranslateerror

+-- warning

+-- deprecationwarning

+-- pendingdeprecationwarning

+-- runtimewarning

+-- syntaxwarning

+-- userwarning

+-- futurewarning

+-- importwarning

+-- unicodewarning

+-- byteswarning

try

捕獲由python或程式本身引發的異常

raise

手工地引發乙個異常

為什麼要使用異常

錯誤處理,當python檢查以程式執行時的錯誤就引發異常,你可以在程式裡捕捉和處理這些錯誤,或者忽略它們。

事件通知,異常也可以作為某種條件的訊號,而不需要在程式裡傳送結果標誌或顯式地測試它們。

特殊情形處理,有時有些情況是很少發生的,把相應的處理**改為異常處理會更好一些。

奇特的控制流,異常是乙個高層次的"goto",可以把它作為實現奇特的控制流的基礎。如反向跟蹤等。

異常的基礎知識

python的try語句有兩種風格---一種是處理異常(try/except/else),一種是無論是否發生異常都將執行最後的**(try/finally)。

try/except/else風格

try:

《語句》 #執行別的**

except 《名字》:

《語句》 #如果在try部份引發了'name'異常

except 《名字》,《資料》:

《語句》 #如果引發了'name'異常,獲得附加的資料

else:

《語句》 #如果沒有異常發生

try的工作原理是,當開始乙個try語句後,python就在當前程式的上下文中作標記,這樣當異常出現時就可以回到這裡,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。

如果當try後的語句執行時發生異常,python就跳回到try並執行第乙個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發新的異常)。

如果在try後的語句裡發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程式的最上層(這樣將結束程式,並列印預設的出錯資訊)。

如果在try子句執行時沒有發生異常,python將執行else語句後的語句(如果有else的話),然後控制流通過整個try語句。

try/finally風格

try:

《語句》

finally:

《語句》 #退出try時總會執行

raise

python總會執行finally子句,無論try子句執行時是否發一異常。

當你想無論是否發生異常都確保執行某些**時,try/finally是有用的。

要引發異常,你需要寫raise語句,它的形式很簡單,raise後面跟著要引發的異常。

raise #手工地引發異常

raise ,#傳遞乙個附加的資料

什麼是異常名(name)呢?它也許是內建作用域內的內建異常(如indexerror),或者是你程式中的任意字串物件。

預設行為:顯示錯誤資訊。

$ python test.py

traceback (innermost last):

file "test.py", line 3, in ?

a = 1 /0

zerodivisionerror: integer division or modulo

當乙個未捕獲的異常發生時,python將結束程式並列印乙個堆疊跟蹤資訊,以及異常名和附加資訊。

用try捕獲內建異常

如果你不想在異常發生時結束你的程式,只需在try裡捕獲它。

#!/usr/bin/python

try:

a = 1 /0

print a

except:

print 'i get the error'

當程式執行是會捕獲乙個錯誤並執行except後面的**。

異常並不總是壞事情,例如,檔案物件的read方法在檔案尾時返回乙個空串,python也提供乙個內建函式raw_input,它從標準輸入流讀入。與read方法不同,當遇到檔案尾時,raw_input()引發內建的eoferror錯誤。所以可以這樣用:

while 1:

try:

line = raw_input() #從stdin讀入行

except eoferror:

break #在檔案末尾退出迴圈

esle:

# 其它處理**

用異常傳遞成功的訊號

found = 'item found'

def search():

引發或返回found

try:

search()

except found:

successful

else:

fail

可以使用try來除錯**,你可以用自已的異常處理替換python預設的異常處理。把整個程式封裝在乙個外部try裡面,你可以捕獲執行時的任何異常。

try語句子句形式表

except: 捕獲所有異常

except name: 只捕獲特定的異常

except name,value: 捕獲異常和它的附加資料

except (name1,name2): 捕獲任何列出的異常

else: 如果沒有異常

finally: 總是執行

捕獲多個異常中的乙個,python從上到下地檢視except子句,括號裡列出多個異常與列出單獨的異常是一樣的,只是更簡潔一些。

執行時巢狀的異常,python會匹配最近的except。

finally子句無論如何都會執行,所以它是做清除動作的好地方,如關閉乙個檔案的操作。

捕捉所有異常

try:

# 你的**

except baseexception, e:

print(str(e))

Python 異常 學習筆記

python 標準異常總結 try 和 try finally 語句 try 下面是檢測範圍,如發生異常停止在第乙個異常的位置 fh open testfile w fh.write 這是乙個測試檔案,用於測試異常 except oserror as reason 下面是出現異常後輸出的 print...

Python學習筆記 異常

1 異常概念 程式在執行是,如果python直譯器遇到乙個錯誤,會停止程式的執行,並且提示一些錯誤資訊,這就是異常 程式停止執行並且提示錯誤資訊這個動作,我們稱之為 丟擲 raise 異常 程式開發是,很難將所有的特殊情況都處理的面面俱到,通過一異常捕獲可以針對突發事件做集中的處理,從而保證程式的穩...

Python學習筆記 異常

python的執行時錯誤稱為異常 1.語法錯誤 軟體的結構上有錯誤而導致不能被直譯器解釋或不能被編譯器編譯。2.邏輯錯誤 由於不完整或不合法的輸入所致,也可能是邏輯無法生存 計算或者輸出結果需要的過程無法執行等。python異常是乙個物件,表示錯誤或意外情況 在python檢測到乙個錯誤時,將觸發乙...