日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在編寫程序時,可能會經(jīng)常報出一些異常,很大一方面原因是自己的疏忽大意導(dǎo)致程序給出錯誤信息,另一方面是因為有些異常是程序運行時不可避免的,比如在爬蟲時可能有幾個網(wǎng)頁的結(jié)構(gòu)不一致,這時兩種結(jié)構(gòu)的網(wǎng)頁用同一套代碼就會出錯,所以我們就需要捕獲出現(xiàn)的異常,以防止程序因為錯誤信息而終止運行。

Python有很多的內(nèi)置異常,也就是說Python開發(fā)者提前考慮到了用戶編程過程中可能會出現(xiàn)這類錯誤,所以制造了這些內(nèi)置異常可以快速準確向用戶反饋出錯信息幫助找出代碼中的bug。

Python官方文檔中也給出了所有內(nèi)置異常及觸發(fā)條件,為了更好的閱讀體驗,我把所有異常及觸發(fā)條件整理成了一張思維導(dǎo)圖:

干貨!一張圖整理了 Python 所有內(nèi)置異常

 

下面針對幾個常見的異常單獨介紹一下,通過舉例深入了解在什么條件下會觸發(fā)哪一種異常。

 

1. SyntaxError

SyntaxError主要是Python語法發(fā)生了錯誤,比如少個冒號、多個引號之類的,編程時稍微疏忽大意一下就會出錯,應(yīng)該是最常見的一種異常錯誤了。

In [1]: While True print('1') 
  File "<ipython-input-1-8ebf67bb4c2b>", line 1 
    While True print('1') 
          ^ 
SyntaxError: invalid syntax 

2. TypeError

TypeError是類型錯誤,也就是說將某個操作或功能應(yīng)用于不合適類型的對象時引發(fā),比如整型與字符型進行加減法、在兩個列表之間進行相減操作等等。

In [8]: a = [1,2];b = [2,3] 
In [9]: a-b 
--------------------------------------------------------------------------- 
TypeError                                 Traceback (most recent call last) 
<ipython-input-9-5ae0619f8fe1> in <module> 
----> 1 a-b 
 
TypeError: unsupported operand type(s) for -: 'list' and 'list' 

3. IndexError

IndexError是指索引出現(xiàn)了錯誤,比如最常見下標索引超出了序列邊界,比如當某個序列m只有三個元素,卻試圖訪問m[4]。

In [16]: m = [1,2,3] 
In [17]: m[4] 
--------------------------------------------------------------------------- 
IndexError                                Traceback (most recent call last) 
<ipython-input-17-94e0dfab3ff6> in <module> 
----> 1 m[4] 
 
IndexError: list index out of range 

4. KeyError

KeyError是關(guān)鍵字錯誤,這個異常主要發(fā)生在字典中,比如當用戶試圖訪問一個字典中不存在的鍵時會被引發(fā)。

In [18]: dict_ = {'1':'yi','2':'er'} 
In [19]: dict_['3'] 
--------------------------------------------------------------------------- 
KeyError                                  Traceback (most recent call last) 
<ipython-input-19-c2e43847635f> in <module> 
----> 1 dict_['3'] 
 
KeyError: '3' 

5. ValueError

ValueError為值錯誤,當用戶傳入一個調(diào)用者不期望的值時會引發(fā),即使這個值的類型是正確的,比如想獲取一個列表中某個不存在值的索引。

In [22]: n = [1,2,3] 
In [23]: n.index(4) 
--------------------------------------------------------------------------- 
ValueError                                Traceback (most recent call last) 
<ipython-input-23-9a1887cf29d7> in <module> 
----> 1 n.index(4) 
 
ValueError: 4 is not in list 

6. AttributeError

AttributeError是屬性錯誤,當用戶試圖訪問一個對象不存在的屬性時會引發(fā),比如列表有index方法,而字典卻沒有,所以對一個字典對象調(diào)用該方法就會引發(fā)該異常。

In [25]: dict_ = {'1':'yi','2':'er'} 
In [26]: dict_.index('1') 
--------------------------------------------------------------------------- 
AttributeError                            Traceback (most recent call last) 
<ipython-input-26-516844ad2563> in <module> 
----> 1 dict_.index('1') 
 
AttributeError: 'dict' object has no attribute 'index' 

7. NameError

NameError是指變量名稱發(fā)生錯誤,比如用戶試圖調(diào)用一個還未被賦值或初始化的變量時會被觸發(fā)。

In [27]: print(list_) 
--------------------------------------------------------------------------- 
NameError                                 Traceback (most recent call last) 
<ipython-input-27-87ebf02ffcab> in <module> 
----> 1 print(list_) 
 
NameError: name 'list_' is not defined 

8. FileNotFoundError

FileNotFoundError為打開文件錯誤,當用戶試圖以讀取方式打開一個不存在的文件時引發(fā)。

In [29]: fb = open('./list','r') 
--------------------------------------------------------------------------- 
FileNotFoundError                         Traceback (most recent call last) 
<ipython-input-29-1b65fe5400ea> in <module> 
----> 1 fb = open('./list','r') 
 
FileNotFoundError: [Errno 2] No such file or directory: './list' 

9. StopIteration

StopIteration為迭代器錯誤,當訪問至迭代器最后一個值時仍然繼續(xù)訪問,就會引發(fā)這種異常,提醒用戶迭代器中已經(jīng)沒有值可供訪問了。

In [30]: list1 = [1,2] 
In [31]: list2 = iter(list1) 
In [33]: next(list2) 
Out[33]: 1 
 
In [34]: next(list2) 
Out[34]: 2 
 
In [35]: next(list2) 
--------------------------------------------------------------------------- 
StopIteration                             Traceback (most recent call last) 
<ipython-input-35-5a5a8526e73b> in <module> 
----> 1 next(list2) 

10. AssertionError

AssertionError為斷言錯誤,當用戶利用斷言語句檢測異常時,如果斷言語句檢測的表達式為假,則會引發(fā)這種異常。

In [45]: list3 = [1,2] 
 
In [46]: assert len(list3)>2 
--------------------------------------------------------------------------- 
AssertionError                            Traceback (most recent call last) 
<ipython-input-46-ffd051e2ba94> in <module> 
----> 1 assert len(list3)>2 
 
AssertionError: 

上面這些異常應(yīng)該是平時編程中遇見頻率比較高的一部分,完整的還是要看上文的思維導(dǎo)圖或者查閱官方文檔,當然除此之外Python也支持用戶根據(jù)自己的需求自定義異常,這里就不再過多概述了。

對于異常的處理Python也有著比較強大的功能,比如可以捕獲異常,主動拋出異常等等,主要有下面幾種方式:

  • try ... except 結(jié)構(gòu)語句捕獲
  • try ... except ... finally 結(jié)構(gòu)語句捕獲
  • try ... except ... else 結(jié)構(gòu)語句捕獲
  • raise關(guān)鍵字主動拋出異常
  • try ... raise ... except 觸發(fā)異常
  • assert斷言語句
  • traceback模塊跟蹤查看異常

分享到:
標簽:異常 Python
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定