欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python錯(cuò)誤和異常總結(jié)詳細(xì)

 更新時(shí)間:2021年10月11日 16:41:06   作者:朱衛(wèi)軍  
本文詳細(xì)且清晰地講解了Python中錯(cuò)誤和異常的概念及其處理方式,通過(guò)具體案例展示try...except、try...finally、with...等句式的具體用法,期望能幫助到對(duì)此感到迷惑的初學(xué)者

寫Python代碼的小伙伴不可避免地會(huì)遇到代碼執(zhí)行錯(cuò)誤和異常,這次就來(lái)詳細(xì)且不失通俗地總結(jié)一下python中的錯(cuò)誤和異常。

先拋出兩個(gè)問(wèn)題:

  • 什么是Python錯(cuò)誤和異常?
  • 如何處理Python錯(cuò)誤和異常?

1、語(yǔ)法錯(cuò)誤

語(yǔ)法錯(cuò)誤可能是初學(xué)者最常遇到的,如下面熟悉的畫面:

SyntaxError: invalid syntax

語(yǔ)法錯(cuò)誤又稱解析錯(cuò)誤,又有老哥會(huì)問(wèn)什么是解析錯(cuò)誤?簡(jiǎn)單來(lái)說(shuō)是基本語(yǔ)法結(jié)構(gòu)寫錯(cuò)了,如:多任務(wù)寫成一行、for循環(huán)沒(méi)加‘:'等。如下:

多任務(wù)寫成一行

for循環(huán)沒(méi)加‘:'

上面示例可以看到,針對(duì)語(yǔ)法錯(cuò)誤,python解析器會(huì)輸出錯(cuò)誤的那一行,并且在最先找到的錯(cuò)誤的位置標(biāo)記了一個(gè)箭頭。

2、異常

熟悉python語(yǔ)法后,可以避免語(yǔ)法錯(cuò)誤,但是代碼常會(huì)發(fā)生異常(Exception)。還是兩個(gè)問(wèn)題:

異常是什么?

Python用異常對(duì)象(exception object)來(lái)表示異常情況。
遇到錯(cuò)誤后,會(huì)引發(fā)異常。如果異常對(duì)象并未被處理或捕捉,程序就會(huì)用所謂的回溯(traceback, 一種錯(cuò)誤信息)終止執(zhí)行。

異常和語(yǔ)法錯(cuò)誤有什么區(qū)別呢?

錯(cuò)誤:是指代碼不符合解釋器或者編譯器語(yǔ)法
異常:是指不完整、不合法輸入,或者計(jì)算出現(xiàn)錯(cuò)誤

關(guān)于異常,舉個(gè)例子:

Print('hello world')

這行代碼出現(xiàn)異常,因?yàn)?code>Print的p應(yīng)該小寫:

python拋出異常類型:NameError,即名字錯(cuò)誤。

其它異常的例子:

可以看到,異常有不同的類型,發(fā)生異常后,其類型名稱會(huì)被打印出來(lái)。上述這些都是python內(nèi)置的異常,用戶也可以自定義異常,這里不做贅述。

3、try...except...語(yǔ)句

有python編程經(jīng)驗(yàn)的人會(huì)知道,python里用try...except...語(yǔ)句來(lái)處理異常情況。

先看個(gè)異常處理的示例:

看,我們完美地捕捉到了程序中的異常。

結(jié)合上面的示例,處理異常的規(guī)則是:把執(zhí)行的語(yǔ)句放在 try 代碼塊中,將錯(cuò)誤處理器代碼放置在 except 代碼塊中,except會(huì)引發(fā)ZeroDivisionError異常來(lái)提醒Coder,這段代碼的錯(cuò)誤是零不能作為被除數(shù)。

except后面也可以不添加異常類型,會(huì)捕獲所有出現(xiàn)的異常:

我們可以把try...except...原理歸納為幾個(gè)要點(diǎn):

  • 首先,執(zhí)行 try 子句 (try 和 except 關(guān)鍵字之間的(多行)語(yǔ)句)
  • 如果沒(méi)有異常發(fā)生,則跳過(guò) except 子句 并完成 try 語(yǔ)句的執(zhí)行
  • 如果在執(zhí)行try 子句時(shí)發(fā)生了異常,則跳過(guò)該子句中剩下的部分。然后,如果異常的類型和 except 關(guān)鍵字后面的異常匹配,則執(zhí)行 except 子句 ,然后繼續(xù)執(zhí)行 try 語(yǔ)句之后的代碼
  • 如果發(fā)生的異常和 except 子句中指定的異常不匹配,則將其傳遞到外部的 try 語(yǔ)句中;如果沒(méi)有找到處理程序,則它是一個(gè) 未處理異常,執(zhí)行將停止并顯示如上所示的消息

4、多個(gè)except子句

上面的try...except...語(yǔ)句只處理了一種異常,如果我想多匹配幾個(gè)異常類型,怎么辦呢?

這里就需要多個(gè)except子句來(lái)幫忙了,舉個(gè)例子:

引發(fā)異常ZeroDivisionError

引發(fā)異常TypeError

上面我們用了兩個(gè)except,匹配ZeroDivisionErrorTypeError這兩種異常,第一個(gè)代碼捕捉到了ZeroDivisionError,第二段代碼捕捉到了TypeError異常,一個(gè)都沒(méi)有漏。

當(dāng)然你還可以這樣寫:

也就是用一個(gè)except捕捉多個(gè)異常,異常類型放到except后面的元組里。

綜上,對(duì)于多個(gè)except子句,可以總結(jié)為:

  • 一個(gè) try 語(yǔ)句可能有多個(gè) except 子句,以指定不同異常的處理程序
  • 最多會(huì)執(zhí)行一個(gè)處理程序
  • 處理程序只處理相應(yīng)的 try 子句中發(fā)生的異常,而不處理同一 try 語(yǔ)句內(nèi)其他處理程序中的異常
  • 一個(gè) except 子句可以將多個(gè)異常命名為帶括號(hào)的元組

5、try...except Exception as e語(yǔ)句

我們常常會(huì)看看這樣的寫法:try...except Exception as e

其中的e代表什么意思呢?

再舉個(gè)例子:

通過(guò)示例可以知道,e輸出了異常類型。

也就是說(shuō),Exception匹配了所有異常,把異常名稱賦給了e。當(dāng)然這里不一定非得是e,你可以取任何的變量名,只是約定俗稱這樣寫罷了。

6、try...except...finally語(yǔ)句

try...except...finally語(yǔ)句可能并不那么常見(jiàn),但它是非常有用的。

如果說(shuō),我想用python打開(kāi)了一個(gè)txt文件,然后讀取,寫入,最后關(guān)閉文件對(duì)象。這是一套常規(guī)流程,如果我想捕捉代碼過(guò)程中的異常,又要保證無(wú)論是否有異常,最后都必須要關(guān)閉文件。這時(shí)候就用到finally,看下面例子:

上面代碼,既捕捉到了異常,最終又關(guān)閉了文件對(duì)象。finaly的作用是,無(wú)論except是否捕捉到異常,finally后面的代碼都會(huì)執(zhí)行,try獲取了資源,finally釋放資源,保證了收尾工作。

7、with...語(yǔ)句

with...語(yǔ)句相當(dāng)于try-finally語(yǔ)句的簡(jiǎn)寫,可以替代try-finally的功能。

表達(dá)式open('poem.txt')返回是一個(gè)_io.TextIOWrapper 類型的變量賦給f。在with語(yǔ)句塊中就可以使用這個(gè)變量操作文件。執(zhí)行with這個(gè)結(jié)構(gòu)之后,f會(huì)自動(dòng)關(guān)閉,相當(dāng)于自帶了一個(gè)finally

到此這篇關(guān)于Python錯(cuò)誤和異??偨Y(jié)詳細(xì)的文章就介紹到這了,更多相關(guān)Python錯(cuò)誤和異常內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Python核心對(duì)象類型字符串

    詳解Python核心對(duì)象類型字符串

    本篇文章通過(guò)理論知識(shí)點(diǎn)給大家講述了Python核心對(duì)象類型字符串的相關(guān)知識(shí)內(nèi)容,對(duì)此有興趣的一起學(xué)習(xí)下。
    2018-02-02
  • 使用Python合并PDF文件并添加自定義目錄及頁(yè)腳的全過(guò)程

    使用Python合并PDF文件并添加自定義目錄及頁(yè)腳的全過(guò)程

    在處理文檔時(shí),我們經(jīng)常遇到需要合并多個(gè)PDF文件并添加目錄及頁(yè)腳的情況,本文將介紹如何使用Python,特別是PyPDF2和reportlab庫(kù)來(lái)實(shí)現(xiàn)這一功能我們將通過(guò)一個(gè)實(shí)用的示例來(lái)演示整個(gè)過(guò)程,需要的朋友可以參考下
    2024-03-03
  • Python基于pyecharts實(shí)現(xiàn)關(guān)聯(lián)圖繪制

    Python基于pyecharts實(shí)現(xiàn)關(guān)聯(lián)圖繪制

    這篇文章主要介紹了Python基于pyecharts實(shí)現(xiàn)關(guān)聯(lián)圖繪制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Pytorch可視化的幾種實(shí)現(xiàn)方法

    Pytorch可視化的幾種實(shí)現(xiàn)方法

    本文主要介紹了Pytorch可視化,主要介紹了3中使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python機(jī)器學(xué)習(xí)之基于Pytorch實(shí)現(xiàn)貓狗分類

    Python機(jī)器學(xué)習(xí)之基于Pytorch實(shí)現(xiàn)貓狗分類

    看了許多關(guān)于PyTorch的入門文章,大抵是從torchvision.datasets中自帶的數(shù)據(jù)集進(jìn)行訓(xùn)練,導(dǎo)致很難把PyTorch運(yùn)用于自己的數(shù)據(jù)集上,真正地靈活運(yùn)用PyTorch,本文詳細(xì)介紹了怎么利用Pytorch實(shí)現(xiàn)貓狗分類,需要的朋友可以參考下
    2021-06-06
  • python SQLAlchemy 中的Engine詳解

    python SQLAlchemy 中的Engine詳解

    這篇文章主要介紹了python SQLAlchemy 中的Engine詳解,Engine 翻譯過(guò)來(lái)就是引擎的意思,汽車通過(guò)引擎來(lái)驅(qū)動(dòng),而 SQLAlchemy 是通過(guò) Engine 來(lái)驅(qū)動(dòng),Engine 維護(hù)了一個(gè)連接池(Pool)對(duì)象和方言(Dialect),需要的朋友可以參考下
    2019-07-07
  • macbook如何徹底刪除python的實(shí)現(xiàn)方法

    macbook如何徹底刪除python的實(shí)現(xiàn)方法

    本文主要介紹了macbook如何徹底刪除python的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python機(jī)器學(xué)習(xí)之線性回歸詳解

    python機(jī)器學(xué)習(xí)之線性回歸詳解

    這篇文章主要介紹了python機(jī)器學(xué)習(xí)之線性回歸詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python3中zip()函數(shù)知識(shí)點(diǎn)小結(jié)

    Python3中zip()函數(shù)知識(shí)點(diǎn)小結(jié)

    本文主要介紹了Python3中zip()函數(shù)知識(shí)點(diǎn)小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 讓你Python到很爽的加速遞歸函數(shù)的裝飾器

    讓你Python到很爽的加速遞歸函數(shù)的裝飾器

    這篇文章主要介紹了讓你Python到很爽的加速遞歸函數(shù)的裝飾器,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05

最新評(píng)論