目錄
零基礎 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… 是必須掌握的內容.
三.猜你喜歡
- Python for 循環(huán)
- Python 字符串
- Python 列表 list
- Python 元組 tuple
- Python 字典 dict
- Python 條件推導式
- Python 列表推導式
- Python 字典推導式
- Python 函數(shù)聲明和調用
- Python 不定長參數(shù) *argc/**kargcs
- Python 匿名函數(shù) lambda
- Python return 邏輯判斷表達式
- Python 字符串/列表/元組/字典之間的相互轉換
- Python 局部變量和全局變量
- Python type 函數(shù)和 isinstance 函數(shù)區(qū)別
- Python is 和 == 區(qū)別
- Python 可變數(shù)據類型和不可變數(shù)據類型
- Python 淺拷貝和深拷貝
未經允許不得轉載:猿說編程 ? Python 異常處理
本文由博客 - 猿說編程 猿說編程 發(fā)布!