哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python錯誤及異常總結(jié)匯總

馬哥Linux運(yùn)維 ? 來源:未知 ? 作者:鄧佳佳 ? 2018-03-06 17:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

程序員的一生中,錯誤幾乎每天都在發(fā)生。在過去的一個時期, 錯誤要么對程序(可能還有機(jī)器)是致命的,要么產(chǎn)生一大堆無意義的輸出,無法被其他計算機(jī)或程序識別,連程序員自己也可能搞不懂它的意義。一旦出現(xiàn)錯誤,程序就會終止執(zhí)行,直到錯誤被修正,程序重新執(zhí)行。所以,人們需要一個”柔和”的處理錯誤的方法,而不是終止程序。同時,程序本身也在不斷發(fā)展,并不是每個錯誤都是致命的,即使錯誤發(fā)生,編譯器或是在執(zhí)行中的程序也可以提供更多更有用的診斷信息,幫助程序員盡快解決問題。然而,錯誤畢竟是錯誤,一般都是停止編譯或執(zhí)行后才能去解決它。一小段代碼只能讓程序終止執(zhí)行,也許還能打印出一些模糊的提示。當(dāng)然,這一切都是在異常和異常處理出現(xiàn)之前的事了。

1. 錯誤

從軟件方面來說,錯誤是語法或是邏輯上的。語法錯誤指示軟件的結(jié)構(gòu)上有錯誤,導(dǎo)致不能被解釋器解釋或編譯器無法編譯。這些錯誤必須在程序執(zhí)行前糾正。當(dāng)程序的語法正確后,剩下的就是邏輯錯誤了。邏輯錯誤可能是由于不完整或是不合法的輸入所致;在其他情況下,還可能是邏輯無法生成,計算,或是輸出結(jié)果需要的過程無法執(zhí)行。這些錯誤通常分別被稱為域錯誤和范圍錯誤。

當(dāng) Python 檢測到一個錯誤時,解釋器就會指出當(dāng)前流已經(jīng)無法繼續(xù)執(zhí)行下去,這時候就出現(xiàn)了異常。

2. 異常

對異常的最好描述是: 它是因為程序出現(xiàn)了錯誤而在正??刂屏饕酝獠扇〉男袨椤_@個行為又分為兩個階段: 首先是引起異常發(fā)生的錯誤,然后是檢測(和采取可能的措施)階段。

第一個階段是在發(fā)生了一個異常條件(有時候也叫做例外的條件)后發(fā)生的。只要檢測到錯誤并且意識到異常條件,解釋器會引發(fā)一個異常。引發(fā)也可以叫做觸發(fā)或者生成,解釋器通過它通知當(dāng)前控制流有錯誤發(fā)生。Python 也允許程序員自己引發(fā)異常,無論是 Python 解釋器還是程序員引發(fā)的,異常就是錯誤發(fā)生的信號,當(dāng)前流將被打斷,用來處理這個錯誤并采取相應(yīng)的操作,這就是第二階段。

對異常的處理發(fā)生在第二階段。異常引發(fā)后,可以調(diào)用很多不同的操作,可以是忽略錯誤(記錄錯誤但不采取任何措施, 采取補(bǔ)救措施后終止程序),或是減輕問題的影響后設(shè)法繼續(xù)執(zhí)行程序。所有的這些操作都代表一種繼續(xù),或是控制的分支,關(guān)鍵是程序員在錯誤發(fā)生時可以指示程序如何執(zhí)行。

類似 Python 這樣支持引發(fā)和處理異常(這更重要)的語言,可以讓開發(fā)人員可以在錯誤發(fā)生時更直接地控制它們。程序員不僅僅有了檢測錯誤的能力,還可以在它們發(fā)生時采取更可靠的補(bǔ)救措施。由于有了運(yùn)行時管理錯誤的能力,應(yīng)用程序的健壯性有了很大的提高。

異常和異常處理并不是什么新概念。它們同樣存在于 Ada,Modula-3,C++,Eiffel,以及 Java 中。異常的起源可以追溯到處理系統(tǒng)錯誤和硬件中斷這類異常的操作系統(tǒng)代碼。在 1965 年左右,PL/1 作為第一個支持異常的主要語言出現(xiàn),而異常處理是作為一個它提供的軟件工具。和其他支持異常處理的語言類似,Python 采用了 “try/嘗試” 塊和 “catching/捕獲” 塊的概念,而且它在異常處理方面更有”紀(jì)律性”。我們可以為不同的異常創(chuàng)建不同的處理器,而不是盲目地創(chuàng)建一個”catch-all/捕獲所有”的代碼。

3. python中常見異常

NameError:嘗試訪問一個未聲明的變量

NameError表示我們訪問了一個沒有初始化的變量. 在 Python 解釋器的符號表沒有找到那個另人討厭的變量. 我們將在后面的兩章討論名稱空間, 現(xiàn)在大家可以認(rèn)為它們是連接名字和對象的”地址簿”就可以了. 任何可訪問的變量必須在名稱空間里列出. 訪問變量需要由解釋器進(jìn)行搜索, 如果請求的名字沒有在任何名稱空間里找到, 那么將會生成一個NameError異常.

ZeroDivisionError:除數(shù)為零

我們邊的例子使用的是整數(shù), 但事實上, 任何數(shù)值被零除都會導(dǎo)致一個ZeroDivisionError異常.

SyntaxError:Python 解釋器語法錯誤

SyntaxError 異常是唯一不是在運(yùn)行時發(fā)生的異常.它代表 Python 代碼中有一個不正確的結(jié)構(gòu), 在它改正之前程序無法執(zhí)行. 這些錯誤一般都是在編譯時發(fā)生, Python 解釋器無法把你的腳本轉(zhuǎn)化為 Python 字節(jié)代碼. 當(dāng)然這也可能是你導(dǎo)入一個有缺陷的模塊的時候.

IndexError:請求的索引超出序列范圍

IndexError在你嘗試使用一個超出范圍的值索引序列時引發(fā).

KeyError:請求一個不存在的字典關(guān)鍵字

映射對象, 例如字典, 是依靠關(guān)鍵字(keys)訪問數(shù)據(jù)值的. 如果使用錯誤的或是不存在的鍵請求字典就會引發(fā)一個KeyError異常.

IOError:輸入/輸出錯誤

類似嘗試打開一個不存在的磁盤文件一類的操作會引發(fā)一個操作系統(tǒng)輸入/輸出(I/O)錯誤. 任何類型的 I/O 錯誤都會引發(fā)IOError異常.

AttributeError:嘗試訪問未知的對象屬性

我們在 myInst.hp 儲存了一個值, 也就是實例 myInst 的 hp 屬性. 屬性被定義后, 我們可以使用熟悉的點/屬性操作符訪問它, 但如果是沒有定義屬性, 例如我們訪問 hq 屬性, 將導(dǎo)致一個AttributeError異常.

4. 檢測和處理異常

異??梢酝ㄟ^try語句來檢測。任何在try語句塊里的代碼都會被監(jiān)測,檢查有無異常發(fā)生。

try語句有兩種主要形式:try-except和try-finally. 這兩個語句是互斥的, 也就是說你只 能 使 用 其 中 的 一 種 . 一 個try語 句 可 以 對 應(yīng) 一 個 或 多 個except子 句 , 但 只 能 對 應(yīng) 一 個finally子句, 或是一個try-except-finally復(fù)合語句.

你可以使用try-except語句檢測和處理異常. 你也可以添加一個可選的else子句處理沒有探測到異常的時執(zhí)行的代碼. 而try-finally只允許檢測異常并做一些必要的清除工作(無論發(fā)生錯誤與否), 沒有任何異常處理設(shè)施. 正如你想像的, 復(fù)合語句兩者都可以做到.

try-except 語句

最 常 見 的try-except語 句 語 法 如 下 所 示,它 由try塊 和except塊 (try_suite 和 except_suite )組成,也可以有一個可選的錯誤原因。

帶有多個 except 的 try 語句

這種格式的 except 語句指定檢測名為 Exception 的異常. 你可以把多個 except 語句連接在一起, 處理一個 try 塊中可能發(fā)生的多種異常, 如下所示:

處理多個異常的 except 語句

我們還可以在一個 except 子句里處理多個異常,前提只是它們被放入一個元組里 , 如下:

Note:try語句塊中異常發(fā)生點后的剩余語句永遠(yuǎn)不會到達(dá)(所以也永遠(yuǎn)不會執(zhí)行)。一旦一個異常被引發(fā),就必須決定控制流下一步到達(dá)的位置。剩余代碼將被忽略,解釋器將搜索處理器,一旦找到,就開始執(zhí)行處理器中的代碼。

如果沒有找到合適的處理器,那么異常就向上移交給調(diào)用者去處理,這意味著堆??蚣芰⒓椿氐街暗哪莻€。如果在上層調(diào)用者也沒找到對應(yīng)處理器,該異常會繼續(xù)被向上移交,直到找到合適處理器。如果到達(dá)最頂層仍然沒有找到對應(yīng)處理器,那么就認(rèn)為這個異常是未處理的,Python 解釋器會顯示出跟蹤返回消息,然后退出。

Python 提供給程序員的try-except語句是為了更好地跟蹤潛在的錯誤并在代碼里準(zhǔn)備好處理異常的邏輯,這樣的機(jī)制在其他語言(例如 C ) 是很難實現(xiàn)的,它的目的是減少程序出錯的次數(shù)并在出錯后仍能保證程序正常執(zhí)行。作為一種工具而言,只有正確得當(dāng)?shù)厥褂盟?,才能使其發(fā)揮作用。

避免把大片的代碼裝入try-except中然后使用pass忽略掉錯誤,你可以捕獲特定的異常并忽略它們,或是捕獲所有異常并采取特定的動作。不要捕獲所有異常,然后忽略掉它們。

異常參數(shù)

異常也可以有參數(shù),異常引發(fā)后它會被傳遞給異常處理器。當(dāng)異常被引發(fā)后參數(shù)是作為附加幫助信息傳遞給異常處理器的。雖然異常原因是可選的,但標(biāo)準(zhǔn)內(nèi)建異常提供至少一個參數(shù),指示異常原因的一個字符串。

異常的參數(shù)可以在處理器里忽略,但 Python 提供了保存這個值的語法,我們已經(jīng)在上邊接觸到相關(guān)內(nèi)容:要想訪問提供的異常原因,你必須保留一個變量來保存這個參數(shù)。把這個參數(shù)放在except語句后,接在要處理的異常后面。

reason 將會是一個包含來自導(dǎo)致異常的代碼的診斷信息的類實例。異常參數(shù)自身會組成一個元組,并存儲為類實例 ( 異 常 類 的 實 例 ) 的 屬 性 。上 邊 的 第 一 種 用 法 中,reason 將 會 是 一 個Exception類的實例。

else 子句

我們已經(jīng)看過else語句段配合其他的 Python 語句,比如條件和循環(huán)。至于try-except語句段,它的功能和你所見過的其他else沒有太多的不同:在try范圍中沒有異常被檢測到時,執(zhí)行else子句。

在else范圍中的任何代碼運(yùn)行前,try范圍中的所有代碼必須完全成功(也就是,結(jié)束前沒有引發(fā)異常)。

finally 子句

finally子句是無論異常是否發(fā)生,是否捕捉都會執(zhí)行的一段代碼。你可以將finally僅僅配合try一起使用,也可以和try-except(else 也是可選的)一起使用,也可以使用獨(dú)立的try-finally。

當(dāng)然,無論如何,你都可以有不止一個的except子句,但最少有一個except語句,而else和finally都是可選的。A,B,C 和 D 是程序(代碼塊)。程序會按預(yù)期的順序執(zhí)行。(注意:可能的順序是A-C-D[正常] 或 A-B-D[異常])。無論異常發(fā)生在 A,B,和/或 C 都將執(zhí)行finally塊。

另一種使用finally的方式是finally單獨(dú)和try連用。這個try-finally語句和try-except區(qū)別在于它不是用來捕捉異常的。作為替代,它常常用來維持一致的行為而無論異常是否發(fā)生。我們得知無論try中是否有異常觸發(fā),finally代碼段都會被執(zhí)行。

try-except-else-finally語句

無論你選擇什么語法,你至少要有一個except子句,而else和finally都是可選的。

with語句

with語句的目的在于從流程圖中把try,except和finally關(guān)鍵字和資源分配釋放相關(guān)代碼統(tǒng)統(tǒng)去掉,而不是像try-except-finally那樣僅僅簡化代碼使之易用。with語法的基本用法看上去如下:

這段代碼試圖打開一個文件,如果一切正常,把文件對象賦值給 f。然后,用迭代器遍歷文件中的每一行,當(dāng)完成時,關(guān)閉文件。無論在這一段代碼的開始,中間,還是結(jié)束時發(fā)生異常,都會執(zhí)行清理的代碼,此外文件仍會被自動的關(guān)閉。

5. 觸發(fā)異常

raise語句

raise語句對所支持是參數(shù)十分靈活,對應(yīng)到語法上就是支持許多不同的格式.rasie 一般的用法是:

第一個參數(shù),SomeExcpetion,是觸發(fā)異常的名字.如果有,它必須是一個字符串,類或?qū)嵗?詳見下文).如果有其他參數(shù)(arg 或 traceback),就必須提供 SomeExcpetion.

第二個符號為可選的 args(比如參數(shù),值),來傳給異常.這可以是一個單獨(dú)的對象也可以是一個對象的元組.當(dāng)異常發(fā)生時,異常的參數(shù)總是作為一個元組傳入.如果 args 原本就是元組,那么就將其傳給異常去處理;如果 args 是一個單獨(dú)的對象,就生成只有一個元素的元組(就是單元素元組).大多數(shù)情況下,單一的字符串用來指示錯誤的原因.如果傳的是元組,通常的組成是一個錯誤字符串,一個錯誤編號,可能還有一個錯誤的地址,比如文件,等等.

最后一項參數(shù),traceback,同樣是可選的(實際上很少用它),如果有的話,則是當(dāng)異常觸發(fā)時新生成的一個用于異常-正?;?exception—normally)的追蹤(traceback)對象.當(dāng)你想重新引發(fā)異常時,第三個參數(shù)很有用(可以用來區(qū)分先前和當(dāng)前的位置).如果沒有這個參數(shù),就填寫 None.

6. 斷言語句

斷言語句等價于這樣的 Python 表達(dá)式,如果斷言成功不采取任何措施(類似語句),否則觸發(fā)AssertionError(斷言錯誤)的異常.assert 的語法如下:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • python
    +關(guān)注

    關(guān)注

    58

    文章

    4882

    瀏覽量

    90281

原文標(biāo)題:Python錯誤及異??偨Y(jié)匯總

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    CAN總線報錯看不懂?5種錯誤幀+5步排查法一次講清

    CAN總線通信異常?錯誤幀頻繁出現(xiàn)?本文詳解五種錯誤幀類型,并提供五步排查法,助你快速定位問題根源。錯誤幀的作用錯誤幀是CAN總線用于
    的頭像 發(fā)表于 03-16 11:36 ?316次閱讀
    CAN總線報錯看不懂?5種<b class='flag-5'>錯誤</b>幀+5步排查法一次講清

    如何在 Vision Five 2 上安裝 python 庫?

    這可能是一個完全愚蠢的問題,但我如何在 Vision Five 2 上安裝 python 庫。 使用該命令后,它給了我這個錯誤。 默認(rèn)為用戶安裝,因為普通站點包不可寫 錯誤:找不到滿足要求
    發(fā)表于 03-06 07:51

    燒錄芯片總失敗?五大常見錯誤與解決方法

    產(chǎn)線常見 Verify Error 校驗錯誤,多非芯片本身問題,而是五大典型因素導(dǎo)致:燒錄座接觸不良、電源供電不穩(wěn)、信號與時序異常、加密保護(hù)誤觸、靜電與溫度影響。按物理連接、電氣環(huán)境、軟件配置逐級排查,規(guī)范耗材更換與產(chǎn)線防護(hù),可顯著提升燒錄良率與穩(wěn)定性。
    的頭像 發(fā)表于 02-24 15:37 ?1264次閱讀

    安裝 Python VisionFive_GPIO失敗是哪里出了問題?

    盡管按照最新的文檔,我在安裝 VisionFive.gpio 包時仍然收到錯誤 sudo apt 安裝 libxml2-dev libxslt-dev python3 -m pip 安裝請求
    發(fā)表于 02-11 06:13

    1688 商品詳情 API 調(diào)用與數(shù)據(jù)解析 Python 實戰(zhàn)

    你想要的是 1688 商品詳情 API 的 Python 調(diào)用與數(shù)據(jù)解析實戰(zhàn)方案,核心是完成 API 憑證配置、接口請求(含簽名)、響應(yīng)數(shù)據(jù)解析、異常處理 的全流程落地,我會提供可直接運(yùn)行的代碼,并
    的頭像 發(fā)表于 02-10 11:23 ?366次閱讀

    RISC-V異常中斷機(jī)制全解析

    RISC-V 作為開源、模塊化的精簡指令集架構(gòu),其異常中斷機(jī)制是保障系統(tǒng)可靠運(yùn)行、響應(yīng)外部事件與處理內(nèi)部錯誤的核心支撐。
    的頭像 發(fā)表于 12-28 14:41 ?1912次閱讀
    RISC-V<b class='flag-5'>異常</b>中斷機(jī)制全解析

    沒有專利的opencv-python 版本

    ) 視頻處理 視頻讀取/寫入、幀提取、運(yùn)動檢測(背景差分) 繪圖功能 畫直線/矩形/圓、添加文字、標(biāo)注關(guān)鍵點 關(guān)鍵總結(jié): 對 Python 3.13 來說,最優(yōu)選擇是安裝 opencv-python
    發(fā)表于 12-13 12:37

    使用setjmp及l(fā)ongjmp函數(shù)處理異常

    ,例如在發(fā)生錯誤異常時,直接跳轉(zhuǎn)到錯誤處理或資源釋放的代碼,而不需要逐層返回。setjmp和longjmp函數(shù)定義在setjmp.h頭文件中,其語法為: int setjmp(jmp_buf
    發(fā)表于 12-11 08:00

    檢查函數(shù)返回值的錯誤異常處理方法

    檢查函數(shù)返回值:這是最常見也最基本的錯誤處理和異常處理方法,就是在調(diào)用一個函數(shù)后,檢查其返回值是否符合預(yù)期或是否表示出錯或失敗。如果出錯或失敗,則根據(jù)返回值或者全局變量errno(定義在
    發(fā)表于 12-11 06:48

    Termux中調(diào)試圣誕樹Python代碼

    在Termux中調(diào)試Python代碼(以圣誕樹立例)非常簡單,核心分為環(huán)境準(zhǔn)備、代碼編寫、運(yùn)行調(diào)試三個步驟,下面一步步教你操作: 一、環(huán)境準(zhǔn)備(首次使用需做) Termux默認(rèn)可能沒有Python
    發(fā)表于 12-09 09:02

    API接口調(diào)用中的網(wǎng)絡(luò)異常及解決方案

    一、連接類異常:“無法建立通信鏈路” 連接類異常的核心問題是 客戶端與API服務(wù)器之間無法成功建立TCP連接 ,導(dǎo)致調(diào)用請求“發(fā)不出去”,是網(wǎng)絡(luò)層最基礎(chǔ)的異常類型。 1. 常見場景與原因 目標(biāo)服務(wù)器
    的頭像 發(fā)表于 11-17 09:22 ?924次閱讀

    Cortex-M0+處理器的HardFault錯誤介紹

    在ARM處理器中,如果一個程序產(chǎn)生了錯誤并且被處理器檢測到,就會產(chǎn)生錯誤異常。Cortex-M0+處理器只有一種異常用以處理錯誤:HardF
    的頭像 發(fā)表于 10-14 10:50 ?3617次閱讀
    Cortex-M0+處理器的HardFault<b class='flag-5'>錯誤</b>介紹

    CAN總線傳播延遲過大導(dǎo)致通信異常現(xiàn)象解析

    本文導(dǎo)讀在CAN總線系統(tǒng)中,傳播延遲過大是引發(fā)通信故障的關(guān)鍵誘因之一,可能會導(dǎo)致仲裁異常,使優(yōu)先級高的信號無法正常優(yōu)先傳輸,破壞通信秩序;可能會造成應(yīng)答錯誤,使發(fā)送節(jié)點難以在應(yīng)答隙內(nèi)接收到有效
    的頭像 發(fā)表于 07-15 11:47 ?1144次閱讀
    CAN總線傳播延遲過大導(dǎo)致通信<b class='flag-5'>異常</b>現(xiàn)象解析

    NCS放大器DAD3350常見錯誤碼及解決方案

    NCS放大器DAD3350在工業(yè)應(yīng)用中可能出現(xiàn)的錯誤碼及解決方案如下: ? 一、常見錯誤碼及原因 ? ? 過載報警(如LV低電壓報警、OVC過電流報警) ? ? 原因 ?: 電源電壓異常(如過低或
    的頭像 發(fā)表于 07-12 09:41 ?1110次閱讀

    PLC指示燈異常閃爍原因及維修

    異常閃爍的常見原因,并提供針對性的維修方案,幫助技術(shù)人員快速定位問題,保障生產(chǎn)連續(xù)性。 一、PLC指示燈異常閃爍的典型表現(xiàn)與分類 PLC面板通常配備電源(PWR)、運(yùn)行(RUN)、錯誤(ERR)、通信(COM)等多個狀態(tài)指示燈。
    的頭像 發(fā)表于 06-07 16:13 ?9916次閱讀
    PLC指示燈<b class='flag-5'>異常</b>閃爍原因及維修
    丹东市| 绍兴市| 依安县| 南昌县| 绩溪县| 忻州市| 平罗县| 永顺县| 阜城县| 海晏县| 宁化县| 岢岚县| 浠水县| 长治市| 连平县| 贡山| 井冈山市| 高平市| 岳阳市| 新竹县| 平湖市| 云南省| 秦皇岛市| 大渡口区| 辽中县| 巴东县| 秀山| 柳林县| 定南县| 泸水县| 朝阳市| 桃江县| 易门县| 旬阳县| 买车| 磐安县| 会东县| 永仁县| 白朗县| 西和县| 奎屯市|