python 是物件導向的語言,所以程式丟擲的異常也是類。
常見的異常類
1.nameerror:嘗試訪問乙個沒有申明的變數
2.zerodivisionerror:除數為 0
3.syntaxerror:語法錯誤
4.indexerror:索引超出序列範圍
5.keyerror:請求乙個不存在的字典關鍵字
6.ioerror:輸入輸出錯誤(比如你要讀的檔案不存在)
7.attributeerror:嘗試訪問未知的物件屬性
8.typeerror:傳給函式的引數型別不正確,比如給 int 函式傳入字元型
自定義異常類
儘管內建的異常類已經包括大部分情況,但如果需要建立自己的異常類,可以採用下面的方法:
複製** **如下:
class customexception(exception): # exception 為所有異常的基類
# 處理異常的**
捕獲異常
複製** **如下:
try:
# 需要進行捕獲異常的**,只有出現異常之前的**被最終執行
except (exception1,exception2,...) as argument:
# 捕獲到 (exception1,exception2,...) 裡的異常才執行本段**
# argument 是乙個異常類的例項,包含異常的具體資訊
except:
# 捕獲到 (exception1,exception2,...) 以外的異常執行本段**,用 sys 模組的 exc_info() 函式可以獲取異常資訊
else:
# 如果沒有捕獲到異常則執行本段**
finally:
# 無論是否捕獲到異常都執行本段**
上述語句並不都是必須的,譬如 try...except...、try...finally... 或者 try...except...else... 語句都是可行的。我們還可以 用 try...except...else... 代替 if...else...。
丟擲異常
如果我們想要在自己編寫的程式中主動丟擲異常,可以採用如下兩種方法:
raise exception(reason)
exception 必須是乙個異常類的名稱。可選項 reason 用來傳遞異常的資訊。
assert expression[,reason]
assert 是斷言的關鍵字。當表示式 expression 為真則什麼都不做,否則丟擲 assertionerror 異常。reason 提供異常的資訊。
上下文管理器
由於物件 file 支援上下文管理協議,因此可以採程式設計客棧用下面的方法開啟檔案:
複製** **如下:
with open('filename') as fp:
# 無論本段**是否出現異常,檔案物件 fp 均能正確關閉
example
複製** **如下:
import sys
def div(num, den):
pr程式設計客棧int('_________________ (',num,',',den,')\n')
try:
ans = num/den
assert den != num, 'equal' # 斷言:分子分母不相等
den = 'changed' # 如果執行本語句之前未出現異常,改變 den 的值
if num % 2: # 如果分子為奇數,則丟擲異常
raise valueerror('odd')
except zerodivisionerror as e:
print('except ... as ...\n\t', e)
except:
print('except\n\t', sys.exc_info())
else:
print('else\n\t', ans)
finally:
print('finally\n\t', den)
div(1,0) # 除數為零,為 zerodivisionerror 異常類
div(1,1) # 分子等於分母,斷言為假,丟擲異常
div(2,1) # 無異常
div(3,1) # 分子為奇數,通過 raise 丟擲異常
div(3,'x') # 不屬於 zerodivisionerror 的其他異常
執行結果:
複製** **如下:
_________________ ( 1 , 0 )
except ... as ...
division by zero
finally
0_________________ ( 1 , 1 )
except
(, assertionerror('equal',), )
finally
1_________________ ( 2 , 1 )
else
2.0finally
changed
_________________ ( 3 , 1 )
except
(, valueerror('odd',), )
finally
changed
_________________ ( 3 , x )
except
(, typeerror("unsupported operand type(s) for /: 'int' and 'str'",), )
finally
x
本文標題: python中的異常處理學習筆記
本文位址: /jiaoben/python/119125.html
Python程式設計入門 第9章 異常處理 學習筆記
一 異常 異常是一種特殊的錯誤物件,可以捕獲並檢查它們,以決定如何處理錯誤。出現異常後,如果不捕獲或以其他方式處理,python將立即停止執行程式,並顯示棧跟蹤 異常發生前呼叫的函式清單 一 引發異常 python內建函式和庫函式通常在出現意外情況時引發異常。如 除以零將丟擲異常 1 0 trace...
異常處理學習
1 異常的使用場合 1 應用程式 2 庫 最好不要捕獲異常,除非某個異常表示的是 可以處理的情況 但要假定呼叫 可以處理他們。2 net 執行時可以把整個程式放在另乙個更大的 try塊中,如果發生的異常 沒有處理,程式流就會退出程式,由 net 執行時中的 catch 塊捕獲它。會導致程式執行中斷,...
異常處理學習筆記
arm處理器的工作模式 使用者模式user 快速中斷模式fiq 處部中斷模式irq 特權模式supervisor 資料訪問中止模式abort 未定義指令中止模式undefined 系統模式system 1一上電,cpu處於 supervisor svc 管理模式 2發生中斷,cpu進入 riq 外部...