日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
干貨來(lái)了!阿里工程師告訴你Python中異常處理的常用方法總結(jié)

如果你想選擇一種語(yǔ)言來(lái)入門(mén)編程,那么Python絕對(duì)是***!

萬(wàn)榮網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),萬(wàn)榮網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為萬(wàn)榮成百上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的萬(wàn)榮做網(wǎng)站的公司定做!

其非常接近自然語(yǔ)言,精簡(jiǎn)了很多不必要的分號(hào)和括號(hào),非常容易閱讀理解。編程簡(jiǎn)單直接,更適合初學(xué)編程者,讓其專(zhuān)注于編程邏輯,而不是困惑于晦澀的語(yǔ)法細(xì)節(jié)上,比起JAVA、C#和C/C++這些編程語(yǔ)言相對(duì)容易很多。

因此,即使是非計(jì)算機(jī)專(zhuān)業(yè)或者沒(méi)有基礎(chǔ)的小白,也能分分鐘入門(mén)。Python的排名從去年開(kāi)始就借助人工智能持續(xù)上升,現(xiàn)在它已經(jīng)成為了***名。

今天小編和小伙伴們分享一下異常處理的這個(gè)常用的解決方法。異常處理在任何一門(mén)編程語(yǔ)言里都是值得關(guān)注的一個(gè)話題,良好的異常處理可以讓你的程序更加健壯,清晰的錯(cuò)誤信息更能幫助你快速修復(fù)問(wèn)題。在Python中,和不分高級(jí)語(yǔ)言一樣,使用了try/except/finally語(yǔ)句塊來(lái)處理異常,如果你有其他編程語(yǔ)言的經(jīng)驗(yàn),實(shí)踐起來(lái)并不難。

什么是例外?

1.錯(cuò)誤

就軟件而言,錯(cuò)誤是合乎邏輯的或合乎邏輯的。錯(cuò)誤是合乎邏輯的或合乎邏輯的。

語(yǔ)法錯(cuò)誤表明,軟件的結(jié)構(gòu)中存在錯(cuò)誤,無(wú)法由解釋器解釋?zhuān)膊荒芫幾g編譯器。這些錯(cuò)誤必須在程序執(zhí)行前更正。

當(dāng)程序的語(yǔ)法正確時(shí),剩下的就是邏輯錯(cuò)誤。邏輯錯(cuò)誤可能是由于不完整或非法輸入引起的;

在其他情況下,可能無(wú)法執(zhí)行邏輯不能生成、計(jì)算或輸出結(jié)果的過(guò)程。這些錯(cuò)誤通常被稱(chēng)為域錯(cuò)誤和范圍錯(cuò)誤。

當(dāng)Python檢測(cè)到錯(cuò)誤時(shí),Python解釋器指出當(dāng)前流無(wú)法繼續(xù)。這時(shí)有一種反常現(xiàn)象。

2.異常

對(duì)異常的***描述是因?yàn)槌绦蝈e(cuò)誤,在正??刂屏髦庑袨?。

這種行為分為兩個(gè)階段:***個(gè)是導(dǎo)致異常發(fā)生的錯(cuò)誤,然后是檢測(cè)(和可能的措施)階段。

***階段發(fā)生在異常情況(有時(shí)稱(chēng)為異常)之后。

只要檢測(cè)到錯(cuò)誤并實(shí)現(xiàn)異常條件,解釋器中就會(huì)出現(xiàn)異常。觸發(fā)器也可以稱(chēng)為觸發(fā)器,拋出或生成。解釋器通知當(dāng)前控制流有錯(cuò)誤。

Python還允許程序員為自己創(chuàng)建異常。無(wú)論是Python解釋器還是程序員,異常都是錯(cuò)誤的信號(hào)。

將中斷當(dāng)前流以處理此錯(cuò)誤并采取相應(yīng)操作。這是第二階段。

異常處理發(fā)生在第二階段,在異常發(fā)生后,可以調(diào)用許多不同的操作。

您可以忽略錯(cuò)誤(記錄錯(cuò)誤,但不采取任何措施,采取補(bǔ)救措施并終止程序)?;蛘咴囍跍p少問(wèn)題的影響后繼續(xù)這個(gè)過(guò)程。

所有這些操作都代表一個(gè)延續(xù),或者一個(gè)控制分支。關(guān)鍵是程序員可以在錯(cuò)誤發(fā)生時(shí)指示程序是如何執(zhí)行的。

Python使用異常對(duì)象(異常對(duì)象)來(lái)表示異常。遇到錯(cuò)誤時(shí)會(huì)出現(xiàn)例外情況。

如果異常對(duì)象沒(méi)有被處理或捕獲,程序?qū)⒔K止執(zhí)行,即所謂回溯(回溯)。

異常處理

語(yǔ)句可以用來(lái)捕獲異常。

試用語(yǔ)句用于檢測(cè)嘗試語(yǔ)句塊中的錯(cuò)誤,以便除了語(yǔ)句可以捕獲異常信息并處理它。

如果您不希望在異常時(shí)終止程序,請(qǐng)?jiān)趪L試中捕獲它。

Grammar:

下面是嘗試的簡(jiǎn)單語(yǔ)法……除了…其他的:

嘗試的工作原理是,在開(kāi)始嘗試語(yǔ)句時(shí),Python被標(biāo)記在當(dāng)前程序的上下文中,這樣當(dāng)出現(xiàn)異常時(shí),它可以返回這里。嘗試子句首先執(zhí)行,接下來(lái)會(huì)發(fā)生什么取決于執(zhí)行中是否有異常。

  1. 如果在執(zhí)行語(yǔ)句后執(zhí)行異常,則Python會(huì)跳回去嘗試并執(zhí)行與異常匹配的***個(gè)除外子句。在處理異常之后,控制流將通過(guò)整個(gè)嘗試語(yǔ)句(除非在處理異常時(shí)出現(xiàn)新異常)。

  2. 如果在嘗試后語(yǔ)句中有一個(gè)異常,但是除了子句沒(méi)有匹配,異常將被發(fā)送到上一個(gè)嘗試或程序的頂部,這將結(jié)束程序并打印默認(rèn)的錯(cuò)誤消息。

  3. 如果在嘗試子句的執(zhí)行中沒(méi)有例外,Python將在其他語(yǔ)句之后執(zhí)行語(yǔ)句(如果有其他的話),然后通過(guò)整個(gè)嘗試語(yǔ)句控制流。

使用except而不帶任何異常類(lèi)型

除例外類(lèi)型外,您可以使用,如下所示:

上面的嘗試除了語(yǔ)句捕獲所有已經(jīng)發(fā)生的異常。但這不是通過(guò)程序識(shí)別特定異常信息的好方法。因?yàn)樗东@了所有異常。

使用except而帶多種異常類(lèi)型

您還可以使用同一個(gè)語(yǔ)句來(lái)處理多個(gè)異常信息,如下所示:

try-finally 語(yǔ)句

***一個(gè)語(yǔ)句執(zhí)行***一個(gè)代碼,不管是否有異常。

當(dāng)一個(gè)異常被拋出嘗試塊時(shí),***塊代碼立即執(zhí)行。

在***一個(gè)塊中的所有語(yǔ)句執(zhí)行后,再次觸發(fā)異常,執(zhí)行除塊代碼之外的執(zhí)行。

參數(shù)的內(nèi)容與異常不同。

下面舉個(gè)例子:

總結(jié)如下:

  1. 除了陳述之外,沒(méi)有必要,***的陳述是沒(méi)有必要的,但兩個(gè)必須有一個(gè),否則沒(méi)有嘗試的意義。

  2. 除了聲明之外,還有不止一種說(shuō)法。Python將按照除語(yǔ)句外的順序匹配指定的異常。如果處理異常,則稍后將不進(jìn)入該例外聲明。

  3. 除了語(yǔ)句可以以元組的形式以元組的形式指定多個(gè)異常,還可以看到實(shí)例代碼。

  4. 如果在例外語(yǔ)句之后沒(méi)有指定異常類(lèi)型,默認(rèn)情況下會(huì)捕獲所有異常,并且可以通過(guò)日志記錄或sys模塊獲取當(dāng)前異常。

  5. 如果你想捕獲一個(gè)異常來(lái)重復(fù)它,請(qǐng)使用“上升”,不要帶任何參數(shù)或信息在它后面。

  6. 不建議捕獲和拋出相同的異常。考慮重構(gòu)代碼。

  7. 不建議在邏輯不明確的情況下捕獲所有異常,并且可能隱藏了一個(gè)非常嚴(yán)重的問(wèn)題。

  8. 試著更換嘗試/除了內(nèi)置的異常處理語(yǔ)句的語(yǔ)句,如與聲明的getattr()方法。

實(shí)證案例

傳遞異常重新引發(fā)異常

在python2,為了保持異常的完整信息,你不能在添加例外對(duì)象提高當(dāng)你抓住它了,否則你的跟蹤信息將從這里切斷。以上是重新拋出異常的最簡(jiǎn)單方法。

還可以考慮一些其他技術(shù),例如在拋出異常之前更新異常信息。

Python3提高了重復(fù)傳輸?shù)睦?,你可以自己試試,但建議同。

Exception 和 BaseException

當(dāng)我們想要捕捉的一般例外,我們應(yīng)該使用異?;騜aseexception?我建議你看看官方文件,這兩個(gè)例外有什么區(qū)別?請(qǐng)看他們之間的繼承權(quán)。

從異常的層次結(jié)構(gòu),baseexception是最基本的異常類(lèi)繼承它,和異常。除了所有的例外,baseexception包含三systemexit例外,keyboardinterrupt和generatorexit。

看來(lái),你的程序應(yīng)該使用異常而不是baseexception當(dāng)捕獲所有異常,因?yàn)槠渌齻€(gè)例外,屬于高層次的例外,和合理的方式應(yīng)該是Python解釋器處理。

except Exception as e和 except Exception, e

代碼示例如下所示:

在python2時(shí)代,你可以使用任何寫(xiě)作的上述兩種風(fēng)格。在Python3,你只能使用寫(xiě)作***的風(fēng)格,和第二形式被遺棄。***種文字可讀性更好,為了程序的兼容性和后期移植的成本,你也留下了第二種寫(xiě)作方式。

raise “Exception string”

將字符串作為異常拋出似乎是非常簡(jiǎn)單的方法,但這是一個(gè)非常壞的習(xí)慣。

如果上面的語(yǔ)句被拋出異常,它將是這樣的。

這是可接受的在python2.4,但沒(méi)有指定異常類(lèi)型,它可能使正確捕獲和處理異常的下游,導(dǎo)致你的程序被掛起。總之,這種文體是封建時(shí)代的不良習(xí)慣,應(yīng)該扔掉。

使用內(nèi)置的語(yǔ)法范式代替try/except

Python本身提供了許多語(yǔ)法范式,簡(jiǎn)化處理異常,如StopIteration異常處理的語(yǔ)句,讓你寫(xiě)一個(gè)循環(huán)順暢。

在打開(kāi)文件之后,帶語(yǔ)句自動(dòng)調(diào)用關(guān)閉的文件操作。當(dāng)我們編寫(xiě)Python代碼時(shí),當(dāng)遇到這種情況時(shí),我們應(yīng)該避免嘗試/排除/***考慮。

例如,當(dāng)我們需要訪問(wèn)一個(gè)不確定的屬性時(shí),您可能會(huì)編寫(xiě)這樣的代碼:

事實(shí)上,你可以使用一個(gè)更簡(jiǎn)單的getattr()來(lái)實(shí)現(xiàn)你的目標(biāo)。

***實(shí)踐

***的做法不限于編程語(yǔ)言,而只限于一些規(guī)則,并在填充之后收獲。

1.例外,您知道,避免捕捉所有異常并吞噬它們。

2.拋出的異常應(yīng)該解釋為什么,有時(shí)您知道異常類(lèi)型不能被猜測(cè)。

3.避免在catch語(yǔ)句塊中做一些毫無(wú)意義的事情。

4.不要使用異常來(lái)控制進(jìn)程,這樣您的程序就很難理解和維護(hù)。

5.如果有需要,記得使用***釋放資源。

6.如果您需要它,在處理異常后不要忘記清理或回滾。

異常的查找表


文章標(biāo)題:干貨來(lái)了!阿里工程師告訴你Python中異常處理的常用方法總結(jié)
轉(zhuǎn)載來(lái)于:http://www.5511xx.com/article/djpgsge.html