亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中的異常類(lèi)型及處理方式示例詳解

 更新時(shí)間:2021年08月23日 11:24:41   作者:Data-Mining  
今天我們主要來(lái)了解一下 Python 中的異常類(lèi)型以及它們的處理方式。說(shuō)到異常處理,我們首先要知道什么是異常。其實(shí),異常就是一類(lèi)事件,當(dāng)它們發(fā)生時(shí),會(huì)影響到程序的正常執(zhí)行,具體內(nèi)容跟隨小編一起看看吧

前言

Python 是一種面向?qū)ο蟮?、解釋型的、通用的、開(kāi)源的腳本編程語(yǔ)言?,F(xiàn)在市面上 Python 非常的流行,主要是因?yàn)樗?jiǎn)單易用,學(xué)習(xí)成本低,比如要實(shí)現(xiàn)某個(gè)功能,Python 可能只需要幾行代碼,而用C語(yǔ)言可能需要上百行代碼,因?yàn)镃語(yǔ)言什么都要得從頭開(kāi)始編碼,而 Python 已經(jīng)內(nèi)置了很多功能模塊,所以,我們只需要導(dǎo)入特定的包,就可以實(shí)現(xiàn)想要的效果。

正文

今天,我們主要來(lái)了解一下 Python 中的異常類(lèi)型以及它們的處理方式。說(shuō)到異常處理,我們首先要知道什么是異常。其實(shí),異常就是一類(lèi)事件,當(dāng)它們發(fā)生時(shí),會(huì)影響到程序的正常執(zhí)行。

一、什么是異常

其實(shí),異常就是一類(lèi)事件,當(dāng)此類(lèi)事件在程序執(zhí)行過(guò)程中發(fā)生時(shí),就會(huì)影響程序的正常執(zhí)行。一般情況下,在 Python 無(wú)法正常處理程序時(shí)就會(huì)發(fā)生一個(gè)異常,而異常是 Python 的一種對(duì)象類(lèi)型,用來(lái)表示一個(gè)錯(cuò)誤。當(dāng) Python 腳本發(fā)生異常時(shí)我們需要捕獲并處理它,否則程序就會(huì)終止。

二、異常的類(lèi)型

Python 中定義了一些標(biāo)準(zhǔn)的異常類(lèi)型,具體的異常名稱(chēng)和對(duì)應(yīng)的實(shí)際意義,我們可以通過(guò)下面的表格來(lái)了解。

異常名稱(chēng) 描述
BaseException 所有異常的基類(lèi)
SystemExit 解釋器請(qǐng)求退出
KeyboardInterrupt 用戶(hù)中斷執(zhí)行(通常是輸入^C)
Exception 常規(guī)錯(cuò)誤的基類(lèi)
StopIteration 迭代器沒(méi)有更多的值
GeneratorExit 生成器(generator)發(fā)生異常來(lái)通知退出
StandardError 所有的內(nèi)建標(biāo)準(zhǔn)異常的基類(lèi)
ArithmeticError 所有數(shù)值計(jì)算錯(cuò)誤的基類(lèi)
FloatingPointError 浮點(diǎn)計(jì)算錯(cuò)誤
OverflowError 數(shù)值運(yùn)算超出最大限制
ZeroDivisionError 除(或取模)零 (所有數(shù)據(jù)類(lèi)型)
AssertionError 斷言語(yǔ)句失敗
AttributeError 對(duì)象沒(méi)有這個(gè)屬性
EOFError 沒(méi)有內(nèi)建輸入,到達(dá)EOF 標(biāo)記
EnvironmentError 操作系統(tǒng)錯(cuò)誤的基類(lèi)
IOError 輸入/輸出操作失敗
OSError 操作系統(tǒng)錯(cuò)誤
WindowsError 系統(tǒng)調(diào)用失敗
ImportError 導(dǎo)入模塊/對(duì)象失敗
LookupError 無(wú)效數(shù)據(jù)查詢(xún)的基類(lèi)
IndexError 序列中沒(méi)有此索引(index)
KeyError 映射中沒(méi)有這個(gè)鍵
MemoryError 內(nèi)存溢出錯(cuò)誤(對(duì)于Python 解釋器不是致命的)
NameError 未聲明/初始化對(duì)象 (沒(méi)有屬性)
UnboundLocalError 訪問(wèn)未初始化的本地變量
ReferenceError 弱引用(Weak reference)試圖訪問(wèn)已經(jīng)垃圾回收了的對(duì)象
RuntimeError 一般的運(yùn)行時(shí)錯(cuò)誤
NotImplementedError 尚未實(shí)現(xiàn)的方法
SyntaxError Python 語(yǔ)法錯(cuò)誤
IndentationError 縮進(jìn)錯(cuò)誤
TabError Tab 和空格混用
SystemError 一般的解釋器系統(tǒng)錯(cuò)誤
TypeError 對(duì)類(lèi)型無(wú)效的操作
ValueError 傳入無(wú)效的參數(shù)
UnicodeError Unicode 相關(guān)的錯(cuò)誤
UnicodeDecodeError Unicode 解碼時(shí)的錯(cuò)誤
UnicodeEncodeError Unicode 編碼時(shí)錯(cuò)誤
UnicodeTranslateError Unicode 轉(zhuǎn)換時(shí)錯(cuò)誤
Warning 警告的基類(lèi)
DeprecationWarning 關(guān)于被棄用的特征的警告
FutureWarning 關(guān)于構(gòu)造將來(lái)語(yǔ)義會(huì)有改變的警告
OverflowWarning 舊的關(guān)于自動(dòng)提升為長(zhǎng)整型(long)的警告
PendingDeprecationWarning 關(guān)于特性將會(huì)被廢棄的警告
RuntimeWarning 可疑的運(yùn)行時(shí)行為(runtime behavior)的警告
SyntaxWarning 可疑的語(yǔ)法的警告
UserWarning 用戶(hù)代碼生成的警告

其實(shí),在上述表格中列出的異常中,也具備一定的層次關(guān)系,我們可以通過(guò)下圖來(lái)了解一下。

三、異常處理

在實(shí)際開(kāi)發(fā)過(guò)程中,我們需要寫(xiě)出健壯性的程序,不希望我們的程序在執(zhí)行過(guò)程中遇到了異常就自動(dòng)終止。因此,我們需要處理程序執(zhí)行過(guò)程中的異常事件,從而保證程序不會(huì)因?yàn)榘l(fā)生異常而終止。在編碼過(guò)程中,我們可以簡(jiǎn)單使用 try/except 語(yǔ)句來(lái)捕捉異常,具體語(yǔ)法如下:

try:
<語(yǔ)句>        # 運(yùn)行別的代碼
except 異常類(lèi)型:
<語(yǔ)句>        # 如果在try部份引發(fā)了異常
else:
<語(yǔ)句>        # 如果沒(méi)有異常發(fā)生

熟悉 Java 的小伙伴都知道,在 Java 中是通過(guò) try...catch 語(yǔ)句來(lái)捕獲代碼中的異常事件的,在 Python 中使用什么呢?

其實(shí),在 Python 中是使用 try...except 語(yǔ)句用來(lái)捕獲異常,通過(guò)監(jiān)視 try 語(yǔ)句塊中的錯(cuò)誤,從而讓 except 語(yǔ)句捕獲異常信息并進(jìn)行處理。

因此,如果你不想在異常發(fā)生時(shí)結(jié)束你的程序,就需要在 try 語(yǔ)句塊中捕獲相應(yīng)的異常。

接下來(lái),我們通過(guò)一個(gè)代碼實(shí)例來(lái)具體了解一下 try...except 的用法。

代碼實(shí)例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
try:
    fh = open("test.txt", "r")
    fh.write("這是一個(gè)測(cè)試文件,用于測(cè)試Python中的異常!")
except IOError:
    print "Error: 寫(xiě)入文件失敗"
else:
    print "內(nèi)容寫(xiě)入文件成功"
    fh.close()

上述代碼的意思是以可讀模式打開(kāi)一個(gè) test.txt 文件,然后向文件中寫(xiě)入一段話:這是一個(gè)測(cè)試文件,用于測(cè)試Python中的異常! 因?yàn)槲募且钥勺x模式打開(kāi)的,所以沒(méi)有寫(xiě)入權(quán)限,肯定會(huì)出錯(cuò),但是因?yàn)槭窃?try 代碼塊中,肯定會(huì)被對(duì)應(yīng)的IO錯(cuò)誤類(lèi)型捕獲,并輸入提示信息:Error:寫(xiě)入文件失敗。

運(yùn)行結(jié)果:

然后,我們修改代碼,以寫(xiě)模式打開(kāi)文件再寫(xiě)入對(duì)應(yīng)的語(yǔ)句,修改后代碼如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
try:
    fh = open("test.txt", "w")
    fh.write("這是一個(gè)測(cè)試文件,用于測(cè)試Python中的異常!")
except IOError:
    print "Error: 寫(xiě)入文件失敗"
else:
    print "內(nèi)容寫(xiě)入文件成功"
    fh.close()

這時(shí),我們發(fā)現(xiàn)文件能夠正常寫(xiě)入內(nèi)容了,并且不會(huì)觸發(fā)異常事件發(fā)生。

運(yùn)行結(jié)果:

四、try 介紹

try 的工作原理是,當(dāng)開(kāi)始一個(gè) try 語(yǔ)句后,python 就在當(dāng)前程序的上下文中作標(biāo)記,這樣當(dāng)異常出現(xiàn)時(shí)就可以回到這里,try 子句先執(zhí)行,接下來(lái)會(huì)發(fā)生什么依賴(lài)于執(zhí)行時(shí)是否出現(xiàn)異常。大致的情況可以分為兩種,一種是觸發(fā)了異常,另一種是沒(méi)有觸發(fā)異常,具體表現(xiàn)如下:

1. 如果當(dāng) try 后的代碼里發(fā)生了異常,python 就跳回到 try 并執(zhí)行第一個(gè)匹配該異常的 except 子句,異常處理完畢,控制流就通過(guò)整個(gè) try 語(yǔ)句。

2. 如果在 try 后的代碼里沒(méi)有發(fā)生異常,python將執(zhí)行else語(yǔ)句后的語(yǔ)句,然后控制流通過(guò)整個(gè)try語(yǔ)句。

其實(shí),上面的代碼實(shí)例很好的覆蓋了這兩種情況。

五、finally 介紹

finally 語(yǔ)句塊中的內(nèi)容,無(wú)論程序是否發(fā)生了異常都執(zhí)行。這一點(diǎn)和 Java 是類(lèi)似的,具體我們來(lái)看一段代碼:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
try:
    fh = open("test.txt", "r")
    fh.write("這是一個(gè)測(cè)試文件,用于測(cè)試Python中的異常!")
except IOError:
    print "Error: 寫(xiě)入文件失敗"
else:
    print "內(nèi)容寫(xiě)入文件成功"
    fh.close()
finally:
    print "異常發(fā)生了,執(zhí)行finally代碼塊"

上述代碼在原來(lái)的基礎(chǔ)上增加了 finally 代碼塊,發(fā)生了異常,依然會(huì)執(zhí)行 finally 代碼塊。同樣,即使沒(méi)有觸發(fā)異常,也會(huì)執(zhí)行相應(yīng)的 finally 代碼塊。感興趣的小伙伴可以自己動(dòng)手試一下,這里就不演示了。

運(yùn)行結(jié)果:

六、raise 介紹

在 Java 中,我們可以使用 throw 語(yǔ)句主動(dòng)拋出異常,那么在 Python 中,是否也有類(lèi)似的關(guān)鍵字呢?答案是肯定的。接下來(lái),我們就來(lái)了解一下 raise 關(guān)鍵字。在編碼過(guò)程中,我們可以使用 raise 語(yǔ)句主動(dòng)觸發(fā)異常。具體的語(yǔ)法可以參考如下格式:

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

需要注意的是語(yǔ)句中 Exception 是異常的類(lèi)型(例如,IOError、OSError),參數(shù)標(biāo)準(zhǔn)異常中任意一種,參數(shù) args 是自已提供的異常參數(shù)。最后一個(gè)參數(shù) trackback 是可選的,一般為空。

實(shí)例代碼:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
try:
    fh = open("test.txt", "w")
    fh.write("這是一個(gè)測(cè)試文件,用于測(cè)試Python中的異常!")
except IOError:
    print "Error: 寫(xiě)入文件失敗"
else:
    print "內(nèi)容寫(xiě)入文件成功"
    try:
	print "拋出自定義異常"
    	raise Exception("這是一個(gè)自定義異常事件")
    except:
	print "自定義異常事件被捕獲"
    fh.close()
 
finally:
    print "自定義異常發(fā)生了,執(zhí)行finally代碼塊"

運(yùn)行結(jié)果:

結(jié)尾

好了,今天關(guān)于 Python 的介紹就到這里吧,本文主要分享了 Python 中的異常類(lèi)型以及異常發(fā)生時(shí)的處理方法,Python 簡(jiǎn)單易用,感興趣的小伙可以自己試試呦!

到此這篇關(guān)于Python中的異常類(lèi)型及處理方式的文章就介紹到這了,更多相關(guān)Python異常類(lèi)型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解Django中內(nèi)置的用戶(hù)認(rèn)證

    深入理解Django中內(nèi)置的用戶(hù)認(rèn)證

    Django自帶一個(gè)用戶(hù)認(rèn)證系統(tǒng),這個(gè)系統(tǒng)處理用戶(hù)帳戶(hù)、組、權(quán)限和基于cookie的會(huì)話,下面這篇文章就來(lái)給大家介紹了關(guān)于Django中內(nèi)置的用戶(hù)認(rèn)證的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-10-10
  • Python函數(shù)和模塊的使用總結(jié)

    Python函數(shù)和模塊的使用總結(jié)

    在本文中小編給大家整理了關(guān)于Python函數(shù)和模塊的使用的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05
  • python打開(kāi)文件并獲取文件相關(guān)屬性的方法

    python打開(kāi)文件并獲取文件相關(guān)屬性的方法

    這篇文章主要介紹了python打開(kāi)文件并獲取文件相關(guān)屬性的方法,涉及Python操作文件的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • python 多線程對(duì)post請(qǐng)求服務(wù)器測(cè)試并發(fā)的方法

    python 多線程對(duì)post請(qǐng)求服務(wù)器測(cè)試并發(fā)的方法

    今天小編就為大家分享一篇python 多線程對(duì)post請(qǐng)求服務(wù)器測(cè)試并發(fā)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Python進(jìn)程Multiprocessing模塊原理解析

    Python進(jìn)程Multiprocessing模塊原理解析

    這篇文章主要介紹了Python進(jìn)程Multiprocessing模塊原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python裝飾器原理與用法分析

    Python裝飾器原理與用法分析

    這篇文章主要介紹了Python裝飾器原理與用法,結(jié)合實(shí)例形式分析了Python裝飾器的概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • Kwargs傳遞給Python 中的另一個(gè)函數(shù)實(shí)現(xiàn)方法

    Kwargs傳遞給Python 中的另一個(gè)函數(shù)實(shí)現(xiàn)方法

    Python 列出了可以傳遞給程序中的函數(shù)的兩種類(lèi)型的參數(shù), 非關(guān)鍵字參數(shù)**args和關(guān)鍵字參數(shù) **kwargs ,在本文中,我們將討論如何使用關(guān)鍵字參數(shù)及如何將關(guān)鍵字參數(shù)傳遞給另一個(gè)函數(shù),感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • Python中WebService客戶(hù)端接口調(diào)用及身份驗(yàn)證的問(wèn)題

    Python中WebService客戶(hù)端接口調(diào)用及身份驗(yàn)證的問(wèn)題

    這篇文章主要介紹了Python中WebService客戶(hù)端接口調(diào)用及身份驗(yàn)證的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python2與Python3的區(qū)別詳解

    Python2與Python3的區(qū)別詳解

    這篇文章主要介紹了Python2與Python3的區(qū)別詳解,需要的朋友可以參考下
    2020-02-02
  • Python request post上傳文件常見(jiàn)要點(diǎn)

    Python request post上傳文件常見(jiàn)要點(diǎn)

    這篇文章主要介紹了Python request post上傳文件常見(jiàn)要點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論