幫 Python 抓蟲 (Exception)

jhong
程式愛好者
Published in
Mar 29, 2021

什麼是 Bug

所有不能按照設計執行的程式都可以稱為有「Bug」,就是程式執行中出現的錯誤而造成的功能不正常,甚至導致程式的崩潰。那 「Bug」 一詞的由來是因為什麼呢? 在1947年9月9日,發現了第一個電腦上的「Bug」,發現原來是一隻飛蛾意外飛入了一台電腦內部而引起了故障,也因此大家開始逐漸開始用「Bug」,就是用 蟲子 來稱呼電腦中的錯誤。

什麼是異常?

  • Python 中一切都是對象,異常是一個對象,表示一個錯誤
  • 程式遇到一些不能處理的情況,就拋出異常
  • 異常會導致程式崩潰而停止運行

程式需要異常來做什麼?

程式出錯我不就才知道我的程式錯在哪裡?我該怎麼去修正改善。正因為自己是開發者或維護者才需要錯誤訊息,但假如你是使用者呢?在你跟程式互動中,使用者體驗應該是最重要的,廣泛的大眾有著你超乎想像的破壞力……或是想像力……嗯……超能力。

想想我們在玩遊戲的時候是用多暴力的方式去探索遊戲世界

所以在能先考慮到一些例外的使用,我們可以先做處理,保證程式的良好運行。能夠幫助我們監控程式的運作,透過捕獲到的異常類型,幫我們把異常部位的程式碼進行處理讓,程式能夠繼續正常運行使用。

異常能幫助我們找出錯誤發生的地點、過程,跟柯男找兇手一樣,兇手就在我們之間,透過不同的線索 (error)幫我們找出錯誤的真相。

常見的異常類型

Exception                 通用的異常類型
ZeroDivisionError 不能整除0
AttributeError 物件沒有這個屬性
IOError 輸入輸出操作失敗
IndexError 沒有當前索引
KeyError 沒有這個鍵值
NameError 沒有這個變量
ValueError 傳入的參數錯誤

如何捕獲異常?

如果有可能會引發異常的一些的程式區塊,就可以放在 try 中保護你的程式。而發生異常錯誤後解決的方式我們放在 except 中。

我們來舉例一個簡單的例子:
當數字除以零,答案會變成無限大,所以會出現錯誤而導致程式停止。

但當我們使用異常處理呢?

加入了異常處理,並給一個異常類型 (用 as 給異常類型取個別名),讓程式印出錯誤訊息,而不是停止程式。

我們也可以同時捕獲多個異常,可以用這兩種方式來實現。來看看以下例子:

例一:

例二:

else 的功能

  • 沒有異常時執行的程式碼

看個簡單的例子:

finally 的功能

  • 無論是否發生異常,一定會執行的地方
  • 即使在 try except 中進行了 return 也依然會執行 finally 的程式碼

再來看個簡單的例子:

自定義拋出異常函式 — raise

以上示範的例子都是捕獲程式內建的異常,那能不能自己定義異常呢 ?我們來試試 !

通過閱讀本文,希望能讓您對異常的概念有個基本的了解,在捕獲異常的操作中從而可以讓您利用在設計上有個更好的想法。以上的幾個小範例希望能幫助到您,從而發覺更好的使用者互動體驗。

--

--