最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的異常類型及處理方式示例詳解

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

前言

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

正文

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

一、什么是異常

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

二、異常的類型

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

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

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

三、異常處理

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

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

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

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

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

接下來,我們通過一個(gè)代碼實(shí)例來具體了解一下 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: 寫入文件失敗"
else:
    print "內(nèi)容寫入文件成功"
    fh.close()

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

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

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

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

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

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

四、try 介紹

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

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

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

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

五、finally 介紹

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

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

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

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

六、raise 介紹

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

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

需要注意的是語句中 Exception 是異常的類型(例如,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: 寫入文件失敗"
else:
    print "內(nèi)容寫入文件成功"
    try:
	print "拋出自定義異常"
    	raise Exception("這是一個(gè)自定義異常事件")
    except:
	print "自定義異常事件被捕獲"
    fh.close()
 
finally:
    print "自定義異常發(fā)生了,執(zhí)行finally代碼塊"

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

結(jié)尾

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

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

相關(guān)文章

  • Python批量寫入ES索引數(shù)據(jù)的示例代碼

    Python批量寫入ES索引數(shù)據(jù)的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用python腳本批量寫ES數(shù)據(jù)(需要使用pip提前下載安裝es依賴庫),感興趣的小伙伴可以學(xué)習(xí)一下
    2024-02-02
  • Python 批量驗(yàn)證和添加手機(jī)號(hào)碼為企業(yè)微信聯(lián)系人

    Python 批量驗(yàn)證和添加手機(jī)號(hào)碼為企業(yè)微信聯(lián)系人

    你是否也有過需要添加很多微信好友的時(shí)候,一個(gè)個(gè)輸入添加太麻煩了,本篇文章手把手教你用Python替我們完成這繁瑣的操作,大家可以在過程中查缺補(bǔ)漏,看看自己掌握程度怎么樣
    2021-10-10
  • 利用Python實(shí)現(xiàn)Picgo圖床工具

    利用Python實(shí)現(xiàn)Picgo圖床工具

    這篇文章主要介紹了如何利用Python實(shí)現(xiàn)Picgo圖床工具,PyPicGo?是一款圖床工具,是PicGo是Python版實(shí)現(xiàn),并支持各種插件自定義插件,目前PyPicGo自帶了gitee、github、SM.MS和七牛云圖傳,以及rename、notify和typora等插件,下面來看文章內(nèi)容介紹,需要的朋友可以參考一下
    2021-11-11
  • 基于Python構(gòu)建一個(gè)智能語音機(jī)器人

    基于Python構(gòu)建一個(gè)智能語音機(jī)器人

    這篇文章主要為大家詳細(xì)介紹了如何基于Python構(gòu)建一個(gè)智能語音機(jī)器人,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • python 美化輸出信息的實(shí)例

    python 美化輸出信息的實(shí)例

    今天小編就為大家分享一篇python 美化輸出信息的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python實(shí)現(xiàn)批量修改文件名

    python實(shí)現(xiàn)批量修改文件名

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量修改文件名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 利用在Python中數(shù)值模擬研究氣體擴(kuò)散

    利用在Python中數(shù)值模擬研究氣體擴(kuò)散

    在 Python 中,可以使用數(shù)值模擬來研究氣體擴(kuò)散。本文就來通過一些示例為大家講講具體的實(shí)現(xiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-01-01
  • Python使用pandas導(dǎo)入csv文件內(nèi)容的示例代碼

    Python使用pandas導(dǎo)入csv文件內(nèi)容的示例代碼

    這篇文章主要介紹了Python使用pandas導(dǎo)入csv文件內(nèi)容,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 深度理解Python中Class類、Object類、Type元類

    深度理解Python中Class類、Object類、Type元類

    本文主要介紹了深度理解Python中Class類、Object類、Type元類,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Python截取字符串的簡單方法實(shí)例

    Python截取字符串的簡單方法實(shí)例

    字符串切片也就是截取字符串,取子串,下面這篇文章主要給大家介紹了關(guān)于Python截取字符串的簡單方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06

最新評(píng)論

罗平县| 新宁县| 通河县| 华蓥市| 乡城县| 茶陵县| 灵璧县| 临泽县| 兴义市| 蛟河市| 芦山县| 开原市| 揭西县| 资中县| 汝州市| 龙山县| 凤山县| 保康县| 灵武市| 常熟市| 浮梁县| 定安县| 丰顺县| 榆中县| 积石山| 高台县| 彰化市| 文水县| 从化市| 江永县| 库伦旗| 英德市| 永泰县| 白城市| 无极县| 安宁市| 怀宁县| 翼城县| 城口县| 新安县| 宽甸|