1. 程式人生 > 其它 >Python 異常處理-Python零基礎入門教程

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… 是必須掌握的內容.

三.猜你喜歡

  1. Python for 迴圈
  2. Python 字串
  3. Python 列表 list
  4. Python 元組 tuple
  5. Python 字典 dict
  6. Python 條件推導式
  7. Python 列表推導式
  8. Python 字典推導式
  9. Python 函式宣告和呼叫
  10. Python 不定長引數 *argc/**kargcs
  11. Python 匿名函式 lambda
  12. Python return 邏輯判斷表示式
  13. Python 字串/列表/元組/字典之間的相互轉換
  14. Python 區域性變數和全域性變數
  15. Python type 函式和 isinstance 函式區別
  16. Python is 和 == 區別
  17. Python 可變資料型別和不可變資料型別
  18. Python 淺拷貝和深拷貝

未經允許不得轉載:猿說程式設計 » Python 異常處理

本文由部落格 - 猿說程式設計 猿說程式設計 釋出!