1. 程式人生 > >一篇搞定所有的python異常,沒有十年的功底做得到?

一篇搞定所有的python異常,沒有十年的功底做得到?

一:加小編QQ群:865597862獲取Python視訊教程以及各類PDF!

異常即是一個事件,該事件會在程式執行過程中發生,影響了程式的正常執行。

一般情況下,在python無法正常處理程式時就會發生一個異常(異常是python物件,表示一個錯誤)

異常就是程式執行時候發生錯誤的訊號(在程式出現錯誤的時候,則會產生一個異常,若程式沒有處理他,則會丟擲該異常,程式的執行也隨之終止),在python中,錯誤觸發的異常如下:

而錯誤分為兩種(語法錯誤和邏輯錯誤):

1,語法錯誤(這種錯誤,根本過不了python直譯器的語法檢測,必須在程式執行前就改正)

2,邏輯錯誤

二:異常的種類有哪些?

在python中不同的異常可以用不同的型別(python中統一了類與類別,型別即類)取標識,一個異常標識一種錯誤。

1,常見語法錯誤

AttributeError 試圖訪問一個物件沒有的樹形,比如foo.x,但是foo沒有屬性x

IOError 輸入/輸出異常;基本上是無法開啟檔案

ImportError 無法引入模組或包;基本上是路徑問題或名稱錯誤

IndentationError 語法錯誤(的子類) ;程式碼沒有正確對齊

IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

KeyError 試圖訪問字典裡不存在的鍵

KeyboardInterrupt Ctrl+C被按下

NameError 使用一個還未被賦予物件的變數

SyntaxError Python程式碼非法,程式碼不能編譯(個人認為這是語法錯誤,寫錯了)

TypeError 傳入物件型別與要求的不符合

UnboundLocalError 試圖訪問一個還未被設定的區域性變數,基本上是由於另有一

個同名的全域性變數,導致你以為正在訪問它

ValueError 傳入一個呼叫者不期望的值,即使值的型別是正確的

2,更多錯誤

ArithmeticError

AssertionError

AttributeError

BaseException

BufferError

BytesWarning

DeprecationWarning

EnvironmentError

EOFError

Exception

FloatingPointError

FutureWarning

GeneratorExit

ImportError

ImportWarning

IndentationError

IndexError

IOError

KeyboardInterrupt

KeyError

LookupError

MemoryError

NameError

NotImplementedError

OSError

OverflowError

PendingDeprecationWarning

ReferenceError

RuntimeError

RuntimeWarning

StandardError

StopIteration

SyntaxError

SyntaxWarning

SystemError

SystemExit

TabError

TypeError

UnboundLocalError

UnicodeDecodeError

UnicodeEncodeError

UnicodeError

UnicodeTranslateError

UnicodeWarning

UserWarning

ValueError

Warning

ZeroDivisionError

3,python所有標準異常類

三:異常處理的定義

python直譯器檢測到錯誤,觸發異常(也允許程式設計師自己觸發異常)

程式設計師編寫特定的程式碼,專門用來捕捉這個異常(這段程式碼與程式邏輯無關,與異常處理有關)

如果捕捉成功則進入另外一個處理分支,執行你為其定製的邏輯,使程式不會崩潰,這就是異常處理

四:異常處理的用法

為了保證程式的健壯性與容錯性,即在遇到錯誤時候程式不會崩潰,我們需要對異常進行處理,

1,如果錯誤發生的條件是可預知的,我們需要用if進行處理,在錯誤發生之前進行預防

2,如果錯誤發生的條件是不可預知的,則需要用到try..except:在錯誤發生之後進行處理

五,try...except...的詳細用法

我們把可能發生錯誤的語句放在try模組裡,用except來處理異常。except可以處理一個專門的異常,也可以處理一組圓括號中的異常,如果except後沒有指定異常,則預設處理所有的異常。每一個try,都必須至少有一個except

1,異常類只能來處理指定的異常情況,如果非指定異常則無法處理

2,多分支

6,主動觸發異常(raise語句)

我們可以使用raise語句自己觸發異常,raise語法格式如下:

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

語句中Exception是異常的型別(例如,NameError)引數是一個異常引數值。該引數是可選的,如果不提供,異常的引數是"None"。

最後一個引數是可選的(在實踐中很少使用),如果存在,是跟蹤異常物件。

示例:

一個異常可以是一個字串,類或物件。 Python的核心提供的異常,大多數都是例項化的類,這是一個類的例項的引數。

定義一個異常非常簡單,如下所示:

7,自定義異常

通過建立一個新的異常類,程式可以命名它們自己的異常。異常應該是典型的繼承自Exception類,通過直接或間接的方式。

以下為與BaseException相關的例項,例項中建立了一個類,基類為BaseException,用於在異常觸發時輸出更多的資訊。

在try語句塊中,使用者自定義的異常後執行except塊語句,變數 e 是用於建立Networkerror類的例項。

8,斷言:assert條件

9,總結try...except

六:什麼時候用異常處理?

有的同學會這麼想,學完了異常處理後,好強大,我要為我的每一段程式都加上try...except,幹毛線去思考它會不會有邏輯錯誤啊,這樣就很好啊,多省腦細胞===》2B青年歡樂多

首先try...except是你附加給你的程式的一種異常處理的邏輯,與你的主要的工作是沒有關係的,這種 東西加的多了,會導致你的程式碼可讀性變差

然後異常處理本就不是你2b邏輯的擦屁股紙,只有在錯誤發生的條件無法預知的情況下,才應該加上try...except