Python 異常處理-Python零基礎入門教程
目錄
零基礎 Python 學習路線推薦 : Python 學習目錄 >> Python 基礎入門
在 Python 開發中,程式碼書寫時難免有疏忽或者意向不到的 bug ,導致程式 run 的過程中有可能會直接崩潰;
然後對於程式猿而言,程式因 bug 崩潰是家常便飯,為了增加程式的健壯性,防止程式崩潰,我們可以對程式的有可能發生崩潰的程式碼增加異常處理,以達到程式穩健執行的目的。
一.Python 異常處理簡介
一般情況,Python 無法正常處理程式時,就是會產生異常造成程式崩潰,舉個例子:
1.大家都知道分母不能為 0,如果分母為 0,程式必然崩潰;
x = 3/0
程式崩潰/報錯:ZeroDivisionError: division by zero
2.假如 Python 檔案讀寫 中,我們講解了檔案的讀寫操作,如果我們對一個不存在的檔案讀取內容,程式必然也會崩潰;
# 讀取123.txt檔案,實際上該檔案並不存在 fp =open("123.txt","r") 程式崩潰/報錯:FileNotFoundError: [Errno 2] No such file or directory: '123.txt'
對於以上的各種異常情況,我們可以通過 try…except…解決,那麼具體有哪些異常能捕獲呢?如下所示:
- 1.BaseException — 所有異常的基類
- 2.SystemExit — 直譯器請求退出
- 3.KeyboardInterrupt — 使用者中斷執行(通常是輸入^C)
- 4.Exception — 常規錯誤的基類
- 5.StopIteration — 迭代器沒有更多的值
- 6.GeneratorExit — 生成器(generator)發生異常來通知退出
- 7.StandardError — 所有的內建標準異常的基類
- 8.ArithmeticError — 所有數值計算錯誤的基類
- 9.FloatingPointError
- 10.OverflowError — 數值運算超出最大限制
- 11.ZeroDivisionError — 除(或取模)零 (所有資料型別)
- 12.AssertionError — 斷言語句失敗
- 13.AttributeError — 物件沒有這個屬性
- 14.EOFError — 沒有內建輸入,到達 EOF 標記
- 15.EnvironmentError — 作業系統錯誤的基類
- 16.IOError — 輸入/輸出操作失敗
- 17.OSError — 作業系統錯誤
- 18.WindowsError — 系統呼叫失敗
- 19.ImportError — 匯入模組/物件失敗
- 20.LookupError — 無效資料查詢的基類
- 21.IndexError — 列中沒有此索引(index)
- 22.KeyError — 對映中沒有這個鍵
- 23.MemoryError — 記憶體溢位錯誤(對於 Python 直譯器不是致命的)
- 24.NameError — 未宣告/初始化物件 (沒有屬性)
- 25.UnboundLocalError — 訪問未初始化的本地變數
- 26.ReferenceError — 弱引用(Weak reference)試圖訪問已經垃圾回收了的物件
- 27.RuntimeError — 一般的執行時錯誤
- 28.NotImplementedError — 尚未實現的方法
- 29.SyntaxError — Python 語法錯誤
- 30.IndentationError — 縮排錯誤
- 31.TabError — Tab 和空格混用
- 32.SystemError — 一般的直譯器系統錯誤
- 33.TypeError — 對型別無效的操作
- 34.ValueError — 傳入無效的引數
- 35.UnicodeError — Unicode 相關的錯誤
- 36.UnicodeDecodeError — Unicode 解碼時的錯誤
- 37.UnicodeEncodeError — Unicode 編碼時錯誤
- 38.UnicodeTranslateError — Unicode 轉換時錯誤
- 39.Warning — 警告的基類
- 40.DeprecationWarning — 關於被棄用的特徵的警告
- 41.FutureWarning — 關於構造將來語義會有改變的警告
- 42.OverflowWarning — 舊的關於自動提升為長整型(long)的警告
- 43.PendingDeprecationWarning — 關於特性將會被廢棄的警告
- 44.RuntimeWarning — 可疑的執行時行為(runtime behavior)的警告
- 45.SyntaxWarning — 可疑的語法的警告
- 46.UserWarning — 使用者程式碼生成的警告[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-QaPnrCEr-1622213823637)(blob:https://www.codersrc.com/d6c5ed6d-6da0-4e59-bd44-380ff6d8db5d “Python 異常處理-猿說程式設計”)]
二.Python 異常捕獲方式
1.捕獲所有異常
try:
<程式碼>
except:
print("異常說明")
示例程式碼:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說程式設計
@Blog(個人部落格地址): www.codersrc.com
@File:Python 異常.py
@Time:2021/04/22 08:00
@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
try:
x = 3 / 0 # 程式出現異常,不會繼續執行後面的程式碼
print("hello world")
except:
print("異常說明:分母不能為0")
print("程式正常結束")
'''
輸出結果:
異常說明:分母不能為0
程式正常結束
'''
2.捕獲指定異常
try:
< 語句 >
except < 異常名 >:
print('異常說明')
示例程式碼:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說程式設計
@Blog(個人部落格地址): www.codersrc.com
@File:Python 異常.py
@Time:2021/04/22 08:00
@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
try:
fp = open("123.txt","r") # 程式出現異常,不會繼續執行後面的程式碼
print("hello world")
fp.close()
except IOError:
print("異常說明:檔案讀取失敗")
print("程式正常結束")
'''
輸出結果:
異常說明:檔案讀取失敗
程式正常結束
'''
3.捕獲多個異常
try:
< 語句 >
except < 異常名1 >:
print('異常說明1')
except < 異常名2 >:
print('異常說明2')
except < 異常名3 >:
print('異常說明3')
該種異常處理語法的規則是:
- a.執行 try 下的語句,如果引發異常,則執行過程會跳到第一個 except 語句。
- b.如果第一個 except 中定義的異常名與引發的異常匹配,則執行該 except 中的語句。
- c.如果引發的異常不匹配第一個 except,則會搜尋第二個 except,允許編寫的 except 數量沒有限制。
- d.如果所有的 except 都不匹配,則異常會傳遞到下一個呼叫本程式碼的最高層 try 程式碼中。
示例程式碼:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說程式設計
@Blog(個人部落格地址): www.codersrc.com
@File:Python 異常.py
@Time:2021/04/22 08:00
@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
try:
fp = open("123.txt","r") # 程式出現異常,不會繼續執行後面的程式碼
print("hello world")
fp.close()
except GeneratorExit:
print("異常說明:GeneratorExit")
except FloatingPointError:
print("異常說明:FloatingPointError")
except OverflowError:
print("異常說明:OverflowError")
except ZeroDivisionError:
print("異常說明:ZeroDivisionError")
except IOError:
print("異常說明:IOError")
print("程式正常結束")
'''
輸出結果:
異常說明:IOError
程式正常結束
'''
4.萬能的異常捕獲
try:
< 語句 >
except Exception as e: # 自動識別異常資訊,並將異常資訊儲存在e中
print('異常說明:',e)
示例程式碼:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說程式設計
@Blog(個人部落格地址): www.codersrc.com
@File:Python 異常.py
@Time:2021/04/22 08:00
@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
try:
fp = open("python.txt","r") # 程式出現異常,不會繼續執行後面的程式碼
print("hello world")
fp.close()
except Exception as e:
print("異常說明:",e)
print("程式正常結束")
'''
輸出結果:
異常說明: [Errno 2] No such file or directory: 'python.txt'
程式正常結束
'''
5.異常中的 else
如果判斷完沒有異常之後還想做其他事,就可以使用下面這樣的 else 語句,注意:是在 try 中沒有異常情況下,才會執行 else 之後的程式碼。
try:
< 語句 >
except < 異常名1 >:
print('異常說明1')
except < 異常名2 >:
print('異常說明2')
else:
< 語句 > # try語句中沒有異常則執行此段程式碼
示例程式碼:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說程式設計
@Blog(個人部落格地址): www.codersrc.com
@File:Python 異常.py
@Time:2021/04/22 08:00
@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
try:
print("hello world")
except GeneratorExit:
print("異常說明:GeneratorExit")
except FloatingPointError:
print("異常說明:FloatingPointError")
except OverflowError:
print("異常說明:OverflowError")
except ZeroDivisionError:
print("異常說明:ZeroDivisionError")
else:
print("i love you")
print("程式正常結束")
'''
輸出結果:
hello world
i love you
程式正常結束
'''
6.異常中的finally
try…finally…語句無論是否發生異常都將會執行最後的程式碼。
try:
< 語句 >
finally:
< 語句 >
示例程式碼:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說程式設計
@Blog(個人部落格地址): www.codersrc.com
@File:Python 異常.py
@Time:2021/04/22 08:00
@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
try:
fp = open("python.txt","r") # 程式出現異常,不會繼續執行後面的程式碼
print("hello world")
fp.close()
except Exception as e:
print("異常說明:",e)
finally:
print("finally") # 無論是否發生異常都將會執行最後的程式碼
print("程式正常結束")
'''
輸出結果:
raise Exception!
異常說明: [Errno 2] No such file or directory: 'python.txt'
finally
程式正常結束
'''
7.raise主動觸發異常
可以使用 raise 語句自己觸發異常,語法如下:
raise [Exception [, args [, traceback]]]
語句中 Exception 是異常的型別(例如,IOError )引數標準異常中任一種,args 是自已提供的異常引數。最後一個引數是可選的(在實踐中很少使用),如果存在,是跟蹤異常物件;示例程式碼如下:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說程式設計
@Blog(個人部落格地址): www.codersrc.com
@File:Python 異常.py
@Time:2021/04/22 08:00
@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
try:
raise Exception("raise Exception!") # 觸發異常後,後面的程式碼就不會再執行
print("hello world")
except Exception as e:
print(e)
finally:
print("OK")
'''
輸出結果:
raise Exception!
OK
'''
在 Python 開發中,為了增加程式的健壯性,異常處理 try…except… 是必須掌握的內容.
三.猜你喜歡
- Python for 迴圈
- Python 字串
- Python 列表 list
- Python 元組 tuple
- Python 字典 dict
- Python 條件推導式
- Python 列表推導式
- Python 字典推導式
- Python 函式宣告和呼叫
- Python 不定長引數 *argc/**kargcs
- Python 匿名函式 lambda
- Python return 邏輯判斷表示式
- Python 字串/列表/元組/字典之間的相互轉換
- Python 區域性變數和全域性變數
- Python type 函式和 isinstance 函式區別
- Python is 和 == 區別
- Python 可變資料型別和不可變資料型別
- Python 淺拷貝和深拷貝
未經允許不得轉載:猿說程式設計 » Python 異常處理
本文由部落格 - 猿說程式設計 猿說程式設計 釋出!