您現在的位置是:首頁 > 籃球

Python的異常型別:究竟錯在了哪裡

  • 由 思路實驗室 發表于 籃球
  • 2022-09-24
簡介另外需要注意的一點,雖然在Python中,我們給變數賦值就能建立變數,但如果想從頭建立一個列表或者字典,不能使用給索引鍵名賦值的方法,還是要先建立好一個空列表字典:4.AttributeError:引發這種異常是因為物件的屬性錯誤

最小的偶數是幾啊

Python的異常型別:究竟錯在了哪裡

大家好,歡迎收看思路實驗室出品的Python入門教程,我是室長。

在上一期

我們學習瞭如何使用try。。。expect語句處理可能發生的異常,防止這些異常讓我們的程式直接崩潰。但有些問題是不應該被忽視的,那就是編寫的程式本身就出現了問題。雖然python並沒有智慧到出了所有問題都能給你提示的程度,但畢竟有很多常犯的錯誤它還是知道的。

那麼這一期我們就來看一下在程式設計過程中你可能會犯的錯,及其引發的異常吧!

1.SyntaxError:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

這種錯誤太低階了,犯錯的都應該自覺面壁。

Python的異常型別:究竟錯在了哪裡

它的意思是語句結構有問題,像什麼缺了括號了、少了冒號了、符號用的中文格式了等等拼寫上的錯誤都會引發SyntaxError。不過通常IDE都會提示這種錯誤,注意圖中True後邊的紅色波浪線。希望大家在寫程式碼時就要多注意,不要犯這種低階錯誤。

但是有一種特殊的SyntaxError更容易出現,就是等號的使用。在條件判斷語句中我們經常會判斷兩邊的值是否相等,這時千萬不要習慣性地只寫一個等號,因為一個等號只有賦值的作用:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

看,小解解都提醒你了,做比較要用兩個等號。

還有一種SyntaxError不太常見,就是用Python的關鍵字作為變數名。

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

養成良好的程式設計習慣就不會出現這種錯誤。

2.Indentation​Error:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

引發這種異常是因為此處的縮排不對。在上圖中if語句沒有相應的程式碼塊就結束了。如果我們希望print函式從屬於if語句,那麼應該給它一個縮排。這屬於該縮排的沒有縮排。同樣,不該縮排的縮進了也會引發異常。另外在PyCharm中一個tab鍵製造的縮排相當於4個空格,如果手動空格的話空格數數對不上同樣會引發異常。和SyntaxError一樣,IDE會提示這種錯誤。在PyCharm中,如果你需要整段程式碼縮排或者取消縮排,可以全選這段程式碼然後按Tab或Shift+Tab進行操作。

3.NameError:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

引發這種異常是因為還沒定義這個變數就先引用了,不過一般我們不會犯這種錯誤,更多可能只是單純地手滑把變數名打錯了。

另外需要注意的一點,雖然在Python中,我們給變數賦值就能建立變數,但如果想從頭建立一個列表或者字典,不能使用給索引\鍵名賦值的方法,還是要先建立好一個空列表\字典:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

4.AttributeError:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

引發這種異常是因為物件的屬性錯誤。最常見的就是用錯了物件的方法,例子中a明明是列表,卻要呼叫字典才有的keys方法,對不起做不到。

Python的異常型別:究竟錯在了哪裡

同樣,如果訪問屬性或者呼叫方法時拼寫有錯誤,也會引發AttributeError。

5.TypeError:

TypeError比較複雜,從定義上看它是將內建操作或函式用於型別不正確的物件時引發。我們挑幾條比較常見的說:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

傳給函式的引數個數不匹配、關鍵字引數對不上號等都會引發TypeError。尤其注意在類中定義例項方法時第一個引數均為self,一定記得要寫出來;

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

某些不同型別的資料不能做加減之類的操作,特別是數字不能和字串相加,想要做加和計算時需要將字串轉為數字型別,想要連線字串時需要將數字轉為字串;

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

對沒有索引的資料型別使用索引也會引發TypeError。特別注意雖然集合跟列表看起來差不多,但集合裡沒有重複的元素,也沒有順序,所以沒有索引值。如果希望使用索引值,則需要將它轉換為列表或者元組;

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

不可迭代的物件不能使用for迴圈。關於迭代的內容我們以後會講到,這裡記下就好。我們目前瞭解到的for迴圈可以使用什麼物件呢?有range物件、dict的三種物件、list物件、tuple物件、set物件、str物件。在我們學習迭代的內容之後,可以使用的物件就變得更多了。

從上面的報錯資訊我們不難看出,雖然引發TypeError的原因很多,但報錯資訊提供得非常細緻,我們完全可以根據報錯資訊來判斷是哪裡出了問題。

6.KeyError:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

“我的字典裡沒有‘失敗’兩個字!”

Python的異常型別:究竟錯在了哪裡

KeyError很簡單,就是字典裡沒有這個鍵。所以報錯資訊也非常簡單,就是鍵名。

7.ValueError:

剛才的TypeError是將內建操作或函式用於型別不正確的物件時引發。ValueError呢,是型別正確了,但是又不合適,例如:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

int函式確實是將字串轉為整數的,但是也不是啥都能轉換的。

8.IndexError:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

要時刻記得索引值是從0開始的,這裡a[3]相當於列表a的第四個元素,但是列表a沒有第四個元素。當然很多同學是能夠記住索引從0開始,這個問題往往出現在列表發生了變化而索引值沒有跟著改變的情況下。

9.ZeroDivision​Error:

Python的異常型別:究竟錯在了哪裡

Python的異常型別:究竟錯在了哪裡

在Python中,一個數除以0會引發ZeroDivision​Error。數學學得好的同學就反對了,明明可以等於無窮的。但是沒辦法,這就是甲魚的臀部——龜腚。不過在Numpy模組中,我們可以讓一個數除以0等於無窮。關於Numpy的內容我們會在番外篇中進行介紹。

這九大異常是我們在程式設計過程中非常常見的異常型別。透過這些異常提供的資訊我們能快速地定位並找出產生異常的原因,從而完善我們的程式碼。

剛才我們提到了迭代的概念,這在Python中是一個非常重要但又容易被忽略的概念。我們經常會使用它卻往往不知道它的用法。請關注下期:

我竟然從全員大篩中領悟到了生成器的用法!迭代器和生成器。

如果這篇文章對你有所幫助,希望能幫室長點個

贊和在看

,你的鼓勵是室長進步的動力!

Top