Python 异常处理-Python零基础入门教程
目錄
- 一.Python 異常處理簡介
- 二.Python 異常捕獲方式
- 1.捕獲所有異常
- 2.捕獲指定異常
- 3.捕獲多個異常
- 4.萬能的異常捕獲
- 5.異常中的 else
- 6.異常中的 finally
- 7.raise 主動觸發(fā)異常
- 三.猜你喜歡
零基礎(chǔ) Python 學(xué)習(xí)路線推薦 : Python 學(xué)習(xí)目錄 >> Python 基礎(chǔ)入門
在 Python 開發(fā)中,代碼書寫時難免有疏忽或者意向不到的 bug ,導(dǎo)致程序 run 的過程中有可能會直接崩潰;
然后對于程序猿而言,程序因 bug 崩潰是家常便飯,為了增加程序的健壯性,防止程序崩潰,我們可以對程序的有可能發(fā)生崩潰的代碼增加異常處理,以達(dá)到程序穩(wěn)健運(yùn)行的目的。
一.Python 異常處理簡介
一般情況,Python 無法正常處理程序時,就是會產(chǎn)生異常造成程序崩潰,舉個例子:
1.大家都知道分母不能為 0,如果分母為 0,程序必然崩潰;
x = 3/0程序崩潰/報錯:ZeroDivisionError: division by zero2.假如 Python 文件讀寫 中,我們講解了文件的讀寫操作,如果我們對一個不存在的文件讀取內(nèi)容,程序必然也會崩潰;
# 讀取123.txt文件,實(shí)際上該文件并不存在 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 — 所有的內(nèi)建標(biāo)準(zhǔn)異常的基類
- 8.ArithmeticError — 所有數(shù)值計算錯誤的基類
- 9.FloatingPointError — 浮點(diǎn)計算錯誤
- 10.OverflowError — 數(shù)值運(yùn)算超出最大限制
- 11.ZeroDivisionError — 除(或取模)零 (所有數(shù)據(jù)類型)
- 12.AssertionError — 斷言語句失敗
- 13.AttributeError — 對象沒有這個屬性
- 14.EOFError — 沒有內(nèi)建輸入,到達(dá) EOF 標(biāo)記
- 15.EnvironmentError — 操作系統(tǒng)錯誤的基類
- 16.IOError — 輸入/輸出操作失敗
- 17.OSError — 操作系統(tǒng)錯誤
- 18.WindowsError — 系統(tǒng)調(diào)用失敗
- 19.ImportError — 導(dǎo)入模塊/對象失敗
- 20.LookupError — 無效數(shù)據(jù)查詢的基類
- 21.IndexError — 列中沒有此索引(index)
- 22.KeyError — 映射中沒有這個鍵
- 23.MemoryError — 內(nèi)存溢出錯誤(對于 Python 解釋器不是致命的)
- 24.NameError — 未聲明/初始化對象 (沒有屬性)
- 25.UnboundLocalError — 訪問未初始化的本地變量
- 26.ReferenceError — 弱引用(Weak reference)試圖訪問已經(jīng)垃圾回收了的對象
- 27.RuntimeError — 一般的運(yùn)行時錯誤
- 28.NotImplementedError — 尚未實(shí)現(xiàn)的方法
- 29.SyntaxError — Python 語法錯誤
- 30.IndentationError — 縮進(jìn)錯誤
- 31.TabError — Tab 和空格混用
- 32.SystemError — 一般的解釋器系統(tǒng)錯誤
- 33.TypeError — 對類型無效的操作
- 34.ValueError — 傳入無效的參數(shù)
- 35.UnicodeError — Unicode 相關(guān)的錯誤
- 36.UnicodeDecodeError — Unicode 解碼時的錯誤
- 37.UnicodeEncodeError — Unicode 編碼時錯誤
- 38.UnicodeTranslateError — Unicode 轉(zhuǎn)換時錯誤
- 39.Warning — 警告的基類
- 40.DeprecationWarning — 關(guān)于被棄用的特征的警告
- 41.FutureWarning — 關(guān)于構(gòu)造將來語義會有改變的警告
- 42.OverflowWarning — 舊的關(guān)于自動提升為長整型(long)的警告
- 43.PendingDeprecationWarning — 關(guān)于特性將會被廢棄的警告
- 44.RuntimeWarning — 可疑的運(yùn)行時行為(runtime behavior)的警告
- 45.SyntaxWarning — 可疑的語法的警告
- 46.UserWarning — 用戶代碼生成的警告[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(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("程序正常結(jié)束")''' 輸出結(jié)果:異常說明:分母不能為0 程序正常結(jié)束 '''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("程序正常結(jié)束")''' 輸出結(jié)果:異常說明:文件讀取失敗 程序正常結(jié)束 '''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 都不匹配,則異常會傳遞到下一個調(diào)用本代碼的最高層 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("程序正常結(jié)束")''' 輸出結(jié)果:異常說明:IOError 程序正常結(jié)束 '''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("程序正常結(jié)束")''' 輸出結(jié)果:異常說明: [Errno 2] No such file or directory: 'python.txt' 程序正常結(jié)束 '''?
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("程序正常結(jié)束")''' 輸出結(jié)果:hello world i love you 程序正常結(jié)束 '''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("程序正常結(jié)束")''' 輸出結(jié)果:raise Exception! 異常說明: [Errno 2] No such file or directory: 'python.txt' finally 程序正常結(jié)束 '''7.raise主動觸發(fā)異常
可以使用 raise 語句自己觸發(fā)異常,語法如下:
raise [Exception [, args [, traceback]]]語句中 Exception 是異常的類型(例如,IOError )參數(shù)標(biāo)準(zhǔn)異常中任一種,args 是自已提供的異常參數(shù)。最后一個參數(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")''' 輸出結(jié)果:raise Exception! OK '''在 Python 開發(fā)中,為了增加程序的健壯性,異常處理 try…except… 是必須掌握的內(nèi)容.
三.猜你喜歡
未經(jīng)允許不得轉(zhuǎn)載:猿說編程 ? Python 異常處理
總結(jié)
以上是生活随笔為你收集整理的Python 异常处理-Python零基础入门教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React之解决类中的this
- 下一篇: C语言 全局变量 - C语言零基础入门教