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

Python錯(cuò)誤+異常+模塊總結(jié)

 更新時(shí)間:2022年05月07日 09:38:28   作者:? 碼農(nóng)君?  ?  
這篇文章主要介紹了Python錯(cuò)誤+異常+模塊總結(jié),在編程時(shí)遇見(jiàn)錯(cuò)誤信息在所難免,Python中會(huì)也有很多種錯(cuò)誤信息,常見(jiàn)的兩種就是語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤,下文我們就來(lái)總結(jié)一下那些常見(jiàn)的異常,需要的小伙伴可以參考一下

前言:

本篇主要講兩方面,錯(cuò)誤和異常以及模塊。在編程時(shí)遇見(jiàn)錯(cuò)誤信息在所難免,Python中會(huì)也有很多種錯(cuò)誤信息,常見(jiàn)的兩種就是語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤,邏輯錯(cuò)誤的種類(lèi)有很多,占據(jù)了異常中大部分位置,下面就開(kāi)始介紹一下這兩個(gè)概念的相關(guān)知識(shí)。

錯(cuò)誤和異常

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

語(yǔ)法錯(cuò)誤英文表示為SyntaxError,后面會(huì)跟著一些關(guān)于錯(cuò)誤的解釋信息,方便你查找語(yǔ)句中的bug,如下:

In?[5]:?print('naitangmao)
??File?"<ipython-input-5-d5b793a8884b>",?line?1
????print('naitangmao)??????????????????^
SyntaxError:?EOL?while?scanning?string?literal

語(yǔ)法錯(cuò)誤顧名思義就是你的代碼語(yǔ)句寫(xiě)錯(cuò)了,比如上面這個(gè)語(yǔ)句的錯(cuò)誤就是少了一個(gè)引號(hào)。發(fā)生錯(cuò)誤后,解釋器會(huì)給出文件的名字和錯(cuò)誤行號(hào),以及在錯(cuò)誤行下面有一個(gè)"^",這個(gè)提示你代碼出錯(cuò)的位置,一般會(huì)位于箭頭前面,這些提示會(huì)便于編寫(xiě)者盡快找出錯(cuò)誤。

異常

有的時(shí)候一行代碼在語(yǔ)法上可能沒(méi)有什么錯(cuò)誤,但是執(zhí)行的時(shí)候解釋器也會(huì)報(bào)紅,這種錯(cuò)誤信息可以稱(chēng)為異常,和語(yǔ)法錯(cuò)誤相比,異常的種類(lèi)更多也更加常見(jiàn)。

舉兩個(gè)簡(jiǎn)單的例子:

In?[6]:?print(1/0)
---------------------------------------------------------------------------
ZeroDivisionError?????????????????????????Traceback?(most?recent?call?last)
<ipython-input-6-2fc232d1511a>?in?<module>
---->?1?print(1/0)
ZeroDivisionError:?division?by?zero

都知道0是不能作為分母出現(xiàn)的,所以Python就會(huì)給出一個(gè)ZeroDivisionError,并提醒你這是一個(gè)零除錯(cuò)誤。

In?[9]:?1+'1'
---------------------------------------------------------------------------
TypeError?????????????????????????????????Traceback?(most?recent?call?last)
<ipython-input-9-d3bd1e37a107>?in?<module>
---->?1?1+'1'
TypeError:?unsupported?operand?type(s)?for?+:?'int'?and?'str'

整形與字符串之間不存在加法運(yùn)算,解釋器分析出后會(huì)給出一個(gè)TypeError,這是一個(gè)類(lèi)型錯(cuò)誤,并且在后面給出錯(cuò)誤的解釋。

異常處理

對(duì)于Python解釋器而言,如果一段程序中某個(gè)部分出現(xiàn)了異常,那么其后面的代碼將不會(huì)被運(yùn)行,但Python中有方法可以對(duì)異常進(jìn)行處理,讓異常不報(bào)紅,進(jìn)而幫助整個(gè)程序完成運(yùn)行,這種行為稱(chēng)作捕獲異常,以try ... except語(yǔ)句組合實(shí)現(xiàn)。

In?[11]:?a?=?1;b?=?'2'
In?[12]:?try:
????...:?????print(a+b)
????...:?except?TypeError:
????...:?????print('類(lèi)型錯(cuò)誤!')
類(lèi)型錯(cuò)誤!

捕獲異常實(shí)現(xiàn)的過(guò)程:

  • 1.執(zhí)行try和except關(guān)鍵字之間的部分
  • 2.如果沒(méi)有異常發(fā)生,except子句在try語(yǔ)句執(zhí)行完畢后就被忽略了。
  • 3.如果在 try 子句執(zhí)行過(guò)程中發(fā)生了異常,那么該子句其余的部分就會(huì)被忽略。如果異常匹配于except關(guān)鍵字后面指定的異常類(lèi)型,就執(zhí)行對(duì)應(yīng)的except子句。然后繼續(xù)執(zhí)行try/except語(yǔ)句之后的代碼。
  • 4.如果發(fā)生了一個(gè)異常,在except子句中沒(méi)有與之匹配的分支,它就會(huì)傳遞到上一級(jí)try語(yǔ)句中。如果最終仍找不到對(duì)應(yīng)的處理語(yǔ)句,它就成為一個(gè)未處理異常,終止程序運(yùn)行,顯示提示信息。

為了避免第4條情況產(chǎn)生,在except語(yǔ)句中可以使用所有異常的父類(lèi)Exception,這樣就囊括了所有異??赡馨l(fā)生的狀況:

In?[15]:?try:
????...:?????print(a+b)
????...:?except?Exception?as?e:
????...:?????print(e)
unsupported?operand?type(s)?for?+:?'int'?and?'str'

拋出異常

利用raise語(yǔ)句可以主動(dòng)拋出一個(gè)異常,但拋出的異常必須是要繼承于Exception的異常類(lèi)或者異常示例。

In?[16]:?raise?NameError('naitangmao')
---------------------------------------------------------------------------
NameError?????????????????????????????????Traceback?(most?recent?call?last)
<ipython-input-16-b751158801b2>?in?<module>
---->?1?raise?NameError('naitangmao')
NameError:?naitangmao

除此上面介紹之外,用戶(hù)還可以根據(jù)自己的需求自己定義異常,不再過(guò)多介紹,建議掌握的部分是每種異常出現(xiàn)的原因以及異常處理的方法。

模塊

第二部分就是模塊,我們有時(shí)可能會(huì)在不同文件之間利用同一個(gè)函數(shù),笨一點(diǎn)的做法就是copy來(lái)copy去,Python提供了一個(gè)機(jī)制可以在將一個(gè)文件中的內(nèi)容導(dǎo)入另一個(gè)文件中使用,這樣的文件就可以稱(chēng)為模塊,需要注意的是并不是任何一個(gè)文件都可以當(dāng)做模塊,而必須是包含Python定義和聲明的文件。

舉一個(gè)簡(jiǎn)單的小例子幫助理解上面這段話,首先可以創(chuàng)建一個(gè)odd_num.py文件,然后這個(gè)文件中只有一個(gè)函數(shù),功能是實(shí)現(xiàn)過(guò)濾掉一個(gè)范圍內(nèi)的偶數(shù):

In?[18]:?def?odd(n):
????...:?????result?=?[]
????...:?????for?i?in?range(n):
????...:?????????if?i?%?2?!=?0:
????...:?????????????result.append(i)
????...:?????return?result

然后我們可以在另一個(gè)文件中導(dǎo)入這個(gè)模塊,如果我們想使用這個(gè)函數(shù)的話,就可以通過(guò)模塊名.函數(shù)名的方法調(diào)用該函數(shù),如下:

In?[20]:?import?odd_num
In?[21]:?odd_num.odd(20)
Out[21]:?[1,?3,?5,?7,?9,?11,?13,?15,?17,?19]

如果你只想用一個(gè)模塊中的某個(gè)子模塊,那么在導(dǎo)入時(shí)就可以指明需要導(dǎo)入的部分,這樣子模塊就可以單獨(dú)使用,不必在以模塊名.函數(shù)名的形式:

In?[22]:?from?odd_num?import?odd
In?[23]:?odd(20)
Out[23]:?[1,?3,?5,?7,?9,?11,?13,?15,?17,?19]

如果你還想偷懶的話,可以利用'*'的形式導(dǎo)入,這種寫(xiě)法是導(dǎo)入一個(gè)模塊中的所有子模塊:

In?[24]:?from?odd_num?import?*

這種方法往往是不被推薦的,因?yàn)闀?huì)讓代碼的可讀性變差。

如果你有很多自定義的模塊,為了更加規(guī)范、易找,那么你就可以將這些模塊存入一個(gè)"包"中,需要注意的是,這個(gè)包中比如要有一個(gè)名為_(kāi)_init__.py的文件,這個(gè)文件可以為空但必須存在,然后導(dǎo)入包中模塊的方式就是包名.模塊名。

Python本身也有自帶的模塊庫(kù),有一部分模塊是內(nèi)置于解釋器之中,然后用戶(hù)可以直接訪問(wèn)這類(lèi)模塊的接口,很大程度上提高了效率,比如time、sys等等。如果你對(duì)于一個(gè)模塊比較陌生,你可以利用dir()函數(shù)搜索某個(gè)模塊的定義,返回的結(jié)果是一個(gè)列表,其中包括模塊內(nèi)的方法、可供調(diào)用的接口等等。

In?[24]:dir(time)
Out[24]:['_STRUCT_TM_ITEMS',?'__doc__',?'__loader__','__name__','__package__','__spec__','altzone','asctime','ctime','daylight',
'get_clock_info','gmtime','localtime','mktime','monotonic','monotonic_ns','perf_counter','perf_counter_ns','process_time',
'process_time_ns','sleep','strftime','strptime','struct_time','thread_time','thread_time_ns','time','time_ns','timezone','tzname']

綜上是對(duì)錯(cuò)誤和異常、模塊兩方面常用知識(shí)的一些概括!

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

相關(guān)文章

  • PyCharm更換pip源、模塊安裝以及PyCharm依賴(lài)包導(dǎo)入導(dǎo)出功能

    PyCharm更換pip源、模塊安裝以及PyCharm依賴(lài)包導(dǎo)入導(dǎo)出功能

    這篇文章主要給大家介紹了關(guān)于PyCharm更換pip源、模塊安裝以及PyCharm依賴(lài)包導(dǎo)入導(dǎo)出功能的相關(guān)資料,我們?cè)谑褂胮ycharm的時(shí)候,pycharm中的虛擬環(huán)境依賴(lài)包需要導(dǎo)出成一個(gè)文件,需要的朋友可以參考下
    2023-11-11
  • Python實(shí)現(xiàn)讀取Excel文件并復(fù)制指定的數(shù)據(jù)行

    Python實(shí)現(xiàn)讀取Excel文件并復(fù)制指定的數(shù)據(jù)行

    這篇文章主要介紹了如何基于Python語(yǔ)言,讀取Excel表格文件數(shù)據(jù),并基于其中某一列數(shù)據(jù)的值,將這一數(shù)據(jù)處于指定范圍的那一行加以復(fù)制,感興趣的可以了解一下
    2023-07-07
  • 使用Python實(shí)現(xiàn)合并多個(gè)Excel文件

    使用Python實(shí)現(xiàn)合并多個(gè)Excel文件

    合并Excel可以將多個(gè)文件中的數(shù)據(jù)合并到一個(gè)文件中,這樣可以幫助我們更好地匯總和管理數(shù)據(jù),本文主要介紹了如何使用第三方Python庫(kù) Spire.XLS for Python 實(shí)現(xiàn)以上兩種合并Excel文件的需求,有需要的可以了解下
    2023-12-12
  • python打包生成so文件的實(shí)現(xiàn)

    python打包生成so文件的實(shí)現(xiàn)

    這篇文章主要介紹了python打包生成so文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • python多線程http壓力測(cè)試腳本

    python多線程http壓力測(cè)試腳本

    這篇文章主要為大家詳細(xì)介紹了python多線程http壓力測(cè)試腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • pycharm安裝包失敗的解決方法

    pycharm安裝包失敗的解決方法

    PyCharm是一款由JetBrains開(kāi)發(fā)的Python集成開(kāi)發(fā)環(huán)境(IDE),它集成了代碼編輯器、調(diào)試器、版本控制工具和測(cè)試工具等功能,下面這篇文章主要給大家介紹了關(guān)于pycharm安裝包失敗的解決方法,需要的朋友可以參考下
    2023-05-05
  • 如何讓python的運(yùn)行速度得到提升

    如何讓python的運(yùn)行速度得到提升

    在本篇文章里小編給大家分享了關(guān)于如何讓python的運(yùn)行速度得到提升的方法和技巧,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • python如何派生內(nèi)置不可變類(lèi)型并修改實(shí)例化行為

    python如何派生內(nèi)置不可變類(lèi)型并修改實(shí)例化行為

    這篇文章主要為大家詳細(xì)介紹了python如何派生內(nèi)置不可變類(lèi)型并修改實(shí)例化行為,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python中的getter與setter你了解嗎

    python中的getter與setter你了解嗎

    這篇文章主要為大家詳細(xì)介紹了python中的getter與setter,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 利用python實(shí)現(xiàn)AR教程

    利用python實(shí)現(xiàn)AR教程

    今天小編就為大家分享一篇利用python實(shí)現(xiàn)AR教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11

最新評(píng)論