Python 異常處理-Python零基礎入門教程

目錄

零基礎 Python 學習路線推薦 : Python 學習目錄 >> Python 基礎入門

在 Python 開發(fā)中,代碼書寫時難免有疏忽或者意向不到的 bug ,導致程序 run 的過程中有可能會直接崩潰巴碗;

然后對于程序猿而言贵少,程序因 bug 崩潰是家常便飯悯嗓,為了增加程序的健壯性,防止程序崩潰,我們可以對程序的有可能發(fā)生崩潰的代碼增加異常處理甲馋,以達到程序穩(wěn)健運行的目的。

一.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 — 用戶中斷執(zhí)行(通常是輸入^C)
  • 4.Exception — 常規(guī)錯誤的基類
  • 5.StopIteration — 迭代器沒有更多的值
  • 6.GeneratorExit — 生成器(generator)發(fā)生異常來通知退出
  • 7.StandardError — 所有的內建標準異常的基類
  • 8.ArithmeticError — 所有數(shù)值計算錯誤的基類
  • 9.FloatingPointError — 浮點計算錯誤
  • 10.OverflowError — 數(shù)值運算超出最大限制
  • 11.ZeroDivisionError — 除(或取模)零 (所有數(shù)據類型)
  • 12.AssertionError — 斷言語句失敗
  • 13.AttributeError — 對象沒有這個屬性
  • 14.EOFError — 沒有內建輸入,到達 EOF 標記
  • 15.EnvironmentError — 操作系統(tǒng)錯誤的基類
  • 16.IOError — 輸入/輸出操作失敗
  • 17.OSError — 操作系統(tǒng)錯誤
  • 18.WindowsError — 系統(tǒng)調用失敗
  • 19.ImportError — 導入模塊/對象失敗
  • 20.LookupError — 無效數(shù)據查詢的基類
  • 21.IndexError — 列中沒有此索引(index)
  • 22.KeyError — 映射中沒有這個鍵
  • 23.MemoryError — 內存溢出錯誤(對于 Python 解釋器不是致命的)
  • 24.NameError — 未聲明/初始化對象 (沒有屬性)
  • 25.UnboundLocalError — 訪問未初始化的本地變量
  • 26.ReferenceError — 弱引用(Weak reference)試圖訪問已經垃圾回收了的對象
  • 27.RuntimeError — 一般的運行時錯誤
  • 28.NotImplementedError — 尚未實現(xiàn)的方法
  • 29.SyntaxError — Python 語法錯誤
  • 30.IndentationError — 縮進錯誤
  • 31.TabError — Tab 和空格混用
  • 32.SystemError — 一般的解釋器系統(tǒng)錯誤
  • 33.TypeError — 對類型無效的操作
  • 34.ValueError — 傳入無效的參數(shù)
  • 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 # 程序出現(xiàn)異常,不會繼續(xù)執(zhí)行后面的代碼
    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") # 程序出現(xiàn)異常达址,不會繼續(xù)執(zhí)行后面的代碼
    print("hello world")
    fp.close()
except IOError:
    print("異常說明:文件讀取失敗")

print("程序正常結束")


'''
輸出結果:

異常說明:文件讀取失敗
程序正常結束
'''

3.捕獲多個異常

try:
    < 語句 >
except < 異常名1 >:
    print('異常說明1')
except < 異常名2 >:
    print('異常說明2')
except < 異常名3 >:
    print('異常說明3')

該種異常處理語法的規(guī)則是:

  • a.執(zhí)行 try 下的語句蔑祟,如果引發(fā)異常,則執(zhí)行過程會跳到第一個 except 語句沉唠。
  • b.如果第一個 except 中定義的異常名與引發(fā)的異常匹配疆虚,則執(zhí)行該 except 中的語句。
  • c.如果引發(fā)的異常不匹配第一個 except满葛,則會搜索第二個 except径簿,允許編寫的 except 數(shù)量沒有限制。
  • 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") # 程序出現(xiàn)異常曼月,不會繼續(xù)執(zhí)行后面的代碼
    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") # 程序出現(xiàn)異常捕透,不會繼續(xù)執(zhí)行后面的代碼
    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 中沒有異常情況下乙嘀,才會執(zhí)行 else 之后的代碼末购。

try:
    < 語句 >
except < 異常名1 >:
    print('異常說明1')
except < 異常名2 >:
    print('異常說明2')
else:
    < 語句 >  # try語句中沒有異常則執(zhí)行此段代碼

示例代碼:

# !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…語句無論是否發(fā)生異常都將會執(zhí)行最后的代碼。

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") # 程序出現(xiàn)異常讳推,不會繼續(xù)執(zhí)行后面的代碼
    print("hello world")
    fp.close()
except Exception as e:
    print("異常說明:",e)
finally:
    print("finally") # 無論是否發(fā)生異常都將會執(zhí)行最后的代碼

print("程序正常結束")


'''
輸出結果:

raise Exception!
異常說明: [Errno 2] No such file or directory: 'python.txt'
finally
程序正常結束
'''

7.raise主動觸發(fā)異常

可以使用 raise 語句自己觸發(fā)異常,語法如下:

raise [Exception [, args [, traceback]]]

語句中 Exception 是異常的類型(例如,IOError )參數(shù)標準異常中任一種玩般,args 是自已提供的異常參數(shù)银觅。最后一個參數(shù)是可選的(在實踐中很少使用),如果存在坏为,是跟蹤異常對象究驴;示例代碼如下:

# !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!")  # 觸發(fā)異常后,后面的代碼就不會再執(zhí)行
    print("hello world")
except Exception as e:
    print(e)
finally:
    print("OK")


'''
輸出結果:

raise Exception!
OK
'''

Python 開發(fā)中够颠,為了增加程序的健壯性熙侍,異常處理 try…except… 是必須掌握的內容.

三.猜你喜歡

  1. Python for 循環(huán)
  2. Python 字符串
  3. Python 列表 list
  4. Python 元組 tuple
  5. Python 字典 dict
  6. Python 條件推導式
  7. Python 列表推導式
  8. Python 字典推導式
  9. Python 函數(shù)聲明和調用
  10. Python 不定長參數(shù) *argc/**kargcs
  11. Python 匿名函數(shù) lambda
  12. Python return 邏輯判斷表達式
  13. Python 字符串/列表/元組/字典之間的相互轉換
  14. Python 局部變量和全局變量
  15. Python type 函數(shù)和 isinstance 函數(shù)區(qū)別
  16. Python is 和 == 區(qū)別
  17. Python 可變數(shù)據類型和不可變數(shù)據類型
  18. Python 淺拷貝和深拷貝

未經允許不得轉載:猿說編程 ? Python 異常處理

本文由博客 - 猿說編程 猿說編程 發(fā)布!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末履磨,一起剝皮案震驚了整個濱河市蛉抓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剃诅,老刑警劉巖巷送,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矛辕,居然都是意外死亡笑跛,警方通過查閱死者的電腦和手機付魔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飞蹂,“玉大人抒抬,你說我怎么就攤上這事∥畋” “怎么了擦剑?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長芥颈。 經常有香客問我惠勒,道長,這世上最難降的妖魔是什么爬坑? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任纠屋,我火速辦了婚禮,結果婚禮上盾计,老公的妹妹穿的比我還像新娘售担。我一直安慰自己,他們只是感情好署辉,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布族铆。 她就那樣靜靜地躺著,像睡著了一般哭尝。 火紅的嫁衣襯著肌膚如雪哥攘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天材鹦,我揣著相機與錄音逝淹,去河邊找鬼。 笑死桶唐,一個胖子當著我的面吹牛栅葡,可吹牛的內容都是我干的。 我是一名探鬼主播尤泽,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼欣簇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了安吁?” 一聲冷哼從身側響起醉蚁,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鬼店,沒想到半個月后网棍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡妇智,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年滥玷,在試婚紗的時候發(fā)現(xiàn)自己被綠了氏身。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惑畴,死狀恐怖蛋欣,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情如贷,我是刑警寧澤陷虎,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站杠袱,受9級特大地震影響尚猿,放射性物質發(fā)生泄漏。R本人自食惡果不足惜楣富,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一凿掂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纹蝴,春花似錦庄萎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耙旦,卻和暖如春脱羡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背免都。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帆竹,地道東北人绕娘。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像栽连,于是被迫代替她去往敵國和親险领。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容