語法錯誤:因語法沒有通過python直譯器於法檢測
邏輯錯誤:有時不能避免
異常就是python程式執行時因發生錯誤而終止。在python的異常報錯資訊中包含:錯誤資訊追蹤資訊;錯誤型別;錯誤值
常見異常
attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x
ioerror 輸入/輸出異常;基本上是無法開啟檔案
importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤
indentationerror 語法錯誤(的子類) **沒有正確對齊
indexerror 下標索引超出序列邊界,
keyerror 試圖訪問字典裡不存在的鍵
keyboardinterrupt ctrl+c被按下
nameerror 使用乙個還未被賦予物件的變數
syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)
typeerror 傳入物件型別與要求的不符合
unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,
導致你以為正在訪問它
valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的
更多型別arithmeticerror
assertionerror
attributeerror
baseexception
buffererror
byteswarning
deprecationwarning
environmenterror
eoferror
exception
floatingpointerror
futurewarning
generatorexit
importerror
importwarning
indentationerror
indexerror
ioerror
keyboardinterrupt
keyerror
lookuperror
memoryerror
nameerror
notimplementederror
oserror
overflowerror
pendingdeprecationwarning
referenceerror
runtimeerror
runtimewarning
standarderror
stopiteration
syntaxerror
syntaxwarning
systemerror
systemexit
taberror
typeerror
unboundlocalerror
unicodedecodeerror
unicodeencodeerror
unicodeerror
unicodetranslateerror
unicodewarning
userwarning
valueerror
warning
zerodivisionerror
因為異常發生之後,異常之後的**就不再執行。異常處理就是捕捉發生的錯誤,防止程式崩潰,並進行程式分流。
異常除了python直譯器檢測到的之外,我們還可以主動丟擲異常。
python解析器去執行程式,檢測到了乙個錯誤時,觸發異常,異常觸發後且沒被處理的情況下,程式就在當前異常處終止,後面的**不會執行,嚴重影響使用體驗,這時我們需要對這些異常進行處理,讓程式能夠順利執行下去,提高程式的健壯性和容錯性。
使用 if 判斷
最基本的使用 if else 進行簡單異常的處理分流
存在侷限性:if判斷式的異常處理只能針對某一段**,對於不同的**段的相同型別的錯誤需要寫重複的if來進行處理;大量與異常處理有關的if語句,會使得**可讀性極變差。
使用try
基本語法
try:
被檢測的**塊
except 異常型別:
try中一旦檢測到異常,就執行這個位置的邏輯
示例:
s1 = 'hello'
try:
int(s1)
except valueerror as e: #只能處理已知型別錯誤
print(e)
多分支s1 = 'hello'
try:
print(s1[50])
int(s1)
except indexerror as e:
print(e)
except keyerror as e:
print(e)
except valueerror as e:
print(e)
萬能異常exceptions1 = 'hello'
try:
int(s1)
except exception as e:
print(e)
dic =
while 1:
try :
num = input('請輸入1~3好選項:').strip()
a = int(num)
print(dic[a])
except keyerror as e :
print('選項超範圍')
except valueerror as e:
print('請輸入數字')
s1 = 'hello'
try:
int(s1)
except indexerror as e: #只是針對下標超範圍的錯誤提示給使用者
print(e)
except exception as e:
print(e)
固定搭配s1 = 'hello'
try:
int(s1)
except indexerror as e:
print(e)
except keyerror as e:
print(e)
except valueerror as e:
print(e)
else:
print('try內**塊沒有異常則執行我')
finally:
print('無論異常與否,都會執行該模組,通常是進行清理工作')
finally: 不管異常是否發生,都會執行;而且是在異常發生之後整個程式終止之前執行finally裡的**,使用finally前不一定要有except;
finally的應用場景:檔案操作,關閉檔案控制代碼;連線資料庫時,關閉資料庫引擎;在函式內,return結束函式之前,執行finally的語句
主動丟擲異常
自己定義錯誤提示
try:
raise typeerror('型別錯誤')
except exception as e:
print(e)
斷言 assert
主動拋錯的一種形式,語法:assert 條件,這裡的條件可以是函式的返回值或是其他條件,是根據需求改變的
assert 1 == 1
print('111')
assert 1 == true
print('2222')
自定義異常 baseexception
baseexception所有異常繼承的基類
class connection(baseexception):
def __init__(self,msg):
self.msg=msg
def __str__(self):
return self.msg
try:
raise connection('連線異常')
except connection as e:
print(e)
優勢
在沒有犧牲程式刻度想、健壯性和容錯性的前提下,使用try ... except異常處理可以代替if
什麼時候用
異常處理不能經常使用,異常處理是需要耗費效能的;有些錯誤是需要分流使用的;**的可讀性變差。
異常要在關鍵節點使用。
Python學習之異常處理
具體 詳見 異常即是乙個事件,該事件會在程式執行過程中發生,影響了程式的正常執行。一般情況下,在python無法正常處理程式時就會發生乙個異常。異常是python物件,表示乙個錯誤。當python指令碼發生異常時我們需要捕獲處理它,否則程式會終止執行。捕捉異常可以使用try except語句。try...
python之異常處理 Python之異常處理
異常物件 請大家執行如下 a 100 0 print a 就會發現直譯器顯示如下的錯誤提示 traceback most recent call last file x.py line 1,in a 100 0 zerodivisionerror division by zero 大家要學會看直譯器...
Python基礎學習之異常處理
編寫程式時,如果遇到異常,且沒有被處理,那麼程式自動結束而不會執行後面的 塊。在io輸入輸出,運算時或者多執行緒處理常會遇到異常,這時需要對其進行預處理,異常也是乙個物件。異常處理 基本框架為 try 正常執行,可能遇到錯誤的 塊 except exceptional exception2 exce...