天天看點

Python基礎:異常處理Python基礎:異常處理打開檔案出錯數值出錯原因是:invalid literal for int() with base 10: ‘abc’An exception flew by!

Python基礎:異常處理

一,學習的内容

Python 異常處理

異常就是運作期檢測到的錯誤。計算機語言針對可能出現的錯誤定義了異常類型,某種錯誤引發對應的異常時,異常處理程式将被啟動,進而恢複程式的正常運作。

  1. Python 标準異常總結

BaseException:所有異常的 基類

Exception:正常異常的 基類

StandardError:所有的内建标準異常的基類

ArithmeticError:所有數值計算異常的基類

FloatingPointError:浮點計算異常

OverflowError:數值運算超出最大限制

ZeroDivisionError:除數為零

AssertionError:斷言語句(assert)失敗

AttributeError:嘗試通路未知的對象屬性

EOFError:沒有内建輸入,到達EOF标記

EnvironmentError:作業系統異常的基類

IOError:輸入/輸出操作失敗

OSError:作業系統産生的異常(例如打開一個不存在的檔案)

WindowsError:系統調用失敗

ImportError:導入子產品失敗的時候

KeyboardInterrupt:使用者中斷執行

LookupError:無效資料查詢的基類

IndexError:索引超出序列的範圍

KeyError:字典中查找一個不存在的關鍵字

MemoryError:記憶體溢出(可通過删除對象釋放記憶體)

NameError:嘗試通路一個不存在的變量

UnboundLocalError:通路未初始化的本地變量

ReferenceError:弱引用試圖通路已經垃圾回收了的對象

RuntimeError:一般的運作時異常

NotImplementedError:尚未實作的方法

SyntaxError:文法錯誤導緻的異常

IndentationError:縮進錯誤導緻的異常

TabError:Tab和空格混用

SystemError:一般的解釋器系統異常

TypeError:不同類型間的無效操作

ValueError:傳入無效的參數

UnicodeError:Unicode相關的異常

UnicodeDecodeError:Unicode解碼時的異常

UnicodeEncodeError:Unicode編碼錯誤導緻的異常

UnicodeTranslateError:Unicode轉換錯誤導緻的異常

  1. Python标準警告總結

Warning:警告的基類

DeprecationWarning:關于被棄用的特征的警告

FutureWarning:關于構造将來語義會有改變的警告

UserWarning:使用者代碼生成的警告

PendingDeprecationWarning:關于特性将會被廢棄的警告

RuntimeWarning:可疑的運作時行為(runtime behavior)的警告

SyntaxWarning:可疑文法的警告

ImportWarning:用于在導入子產品過程中觸發的警告

UnicodeWarning:與Unicode相關的警告

BytesWarning:與位元組或位元組碼相關的警告

ResourceWarning:與資源使用相關的警告

總結:

AttributeError 試圖通路一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x

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

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

IndentationError 文法錯誤(的子類) ;代碼沒有正确對齊

IndexError 下标索引超出序列邊界,比如當x隻有三個元素,卻試圖通路x[5]

KeyError 試圖通路字典裡不存在的鍵

KeyboardInterrupt Ctrl+C被按下

NameError 使用一個還未被賦予對象的變量

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

TypeError 傳入對象類型與要求的不符合

UnboundLocalError 試圖通路一個還未被設定的局部變量,基本上是由于另有一個同名的全局變量,導緻你以為正在通路它

ValueError 傳入一個調用者不期望的值,即使值的類型是正确的

  1. try - except 語句

(1)單個分支

try:
     檢測範圍
except Exception[as reason]:
     出現異常後的處理代碼
           

try 語句按照如下方式工作:

首先,執行try子句(在關鍵字try和關鍵字except之間的語句)

如果沒有異常發生,忽略except子句,try子句執行後結束。

如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分将被忽略。如果異常的類型和except之後的名稱相符,那麼對應的except子句将被執行。最後執行try - except語句之後的代碼。

如果一個異常沒有與任何的except比對,那麼這個異常将會傳遞給上層的try中。

eg:

1,try:

2,f = open(‘test.txt’)

3 print(f.read())

4 ,f.close()

5,except OSError:

6 print(‘打開檔案出錯’)

打開檔案出錯

(2)多個分支

一個try語句可能包含多個except子句,分别來處理不同的特定的異常。最多隻有一個分支會被執行。

【例子】

1,try:

2,int(“abc”)

3,s = 1 + ‘1’

4,f = open(‘test.txt’)

5,print(f.read())

6,f.close()

7,except OSError as error:

8,print(‘打開檔案出錯\n原因是:’ + str(error))

9,except TypeError as error:

10, print(‘類型出錯\n原因是:’ + str(error))

11 ,except ValueError as error:

12, print(‘數值出錯\n原因是:’ + str(error))

數值出錯

原因是:invalid literal for int() with base 10: ‘abc’

4, try - except - finally 語句

try: 檢測範圍 except Exception[as reason]: 出現異常後的處理代碼 finally: 無論如何都會被執行的代碼

不管try子句裡面有沒有發生異常,finally子句都會執行

5,try - except - else 語句

如果在try子句執行時沒有發生異常,Python将執行else語句

6,raise語句

Python 使用raise語句抛出一個指定的異常。

例子】

try:

raise NameError(‘HiThere’)

except NameError:

print(‘An exception flew by!’)

An exception flew by!

二,難題解惑

1,try-except

這個我真的有點懵,但是我詢問了朋友和百度,終于明白一點了

Python 提供了try except語句捕獲并處理異常,該異常處理語句的基本文法結構如下:

try:

可能産生異常的代碼塊

except [(Error1, Error2, …) [as e]]:

處理異常的代碼塊1

except [(Error3, Error4, …) [as e]]:

處理異常的代碼塊2

該格式中,[] 括起來的部分可以使用,也可以省略;(Error1,Error2,…) 、(Error3,Error4,…) 表示各自的 except 塊可以處理異常的具體類型;[as e] 表示将異常類型指派給變量 e(友善在 except 塊中調用異常類型)。

注意,except 後面也可以不指定具體的異常名稱,這樣的話,表示要捕獲所有類型的異常。

另外,從 try except 的基本文法格式可以看出,try 塊僅有一個,但 except 代碼塊可以有多個,這是為了針對不同的異常類型提供不同的異常處理方式。當程式發生不同的意外情況時,會對應不同的異常類型,Python 解釋器就會根據該異常類型來決定使用哪個 except 塊來處理該異常。

eg:

try:

a = int(input(“輸入被除數:”))

b = int(input(“輸入除數:”))

c = a / b

print(“您輸入的兩個數相除的結果是:”, c )

except (ValueError, ArithmeticError):

print(“程式發生了數字格式異常、算術異常之一”)

except :

print(“未知異常”)

print(“程式繼續運作”)

程式運作結果為:

輸入被除數:a

17:33:20

程式發生了數字格式異常、算術異常之一

程式繼續運作

上面程式中,第 6 行代碼使用了(ValueError, ArithmeticError)來指定所捕獲的異常類型,這就表明該 except 塊可以同時捕獲這 2 種類型的異常;第 8 行代碼隻有 except 關鍵字,并未指定具體要捕獲的異常類型,這種省略異常類的 except 語句也是合法的,它表示可捕獲所有類型的異常,一般會作為異常捕獲的最後一個 except 塊。

2, try - except - finally/else

try:

可能觸發異常的語句

except 錯誤類型1 [as 變量2]:

異常處理語句1

except 錯誤類型2 [as 變量2]:

異常處理語句2

except (錯誤類型3,錯誤類型4,······) [as 變量3]:

異常處理語句3

except:

異常處理語句other

else:

未發生異常的語句

finally:

最終語句

eg: 17:34:49

def f():

try:

print(1)

return 1

except:

print(2)

return 2

else:

print(3)

return 3

finally:

print(4)

return 4

1

4

4

了解更多分析及資料抓取可檢視:

http://cloud.yisurvey.com:9081/html/d8acf20b-342f-4806-8dcc-5e6a8d00881d.html?ly=csdn

本文轉載自網際網路、僅供學習交流,内容版權歸原作者所有,如涉作品、版權和其他問題請聯系我們删除處理。

特别說明:本文旨在技術交流,請勿将涉及的技術用于非法用途,否則一切後果自負。如果您覺得我們侵犯了您的合法權益,請聯系我們予以處理。