熱門例外

Python SELF TW
等級 17 , 課堂 1
開放

2.1 產生例外

打不過就加入。如果我們無法避免程式中的錯誤,我們必須學會控制它們。因此,讓我們學會故意產生例外。

最簡單的例外範例— 就是除以零。程式也是簡單的:


x = 100 / 0
        

這樣的程式碼會出現錯誤:


Traceback (most recent call last):
    File "", line 1, in 
         x = 100 / 0
        ~~~^~   
ZeroDivisionError: division by zero
        

ZeroDivisionError — 這是例外的名稱,而 division by zero — 是它的簡短描述。此外,Python 會告訴你這個例外發生在哪一行。

資料類型不匹配

當然,也有可能發生其他例外。例如,當你試圖將字符串和數字相加時:


s = "100" + 100
        

會出現例外 TypeError


Traceback (most recent call last):
    File "", line 1, in 
TypeError: unsupported operand type(s) for +: 'str' and 'int'
        

超出列表範圍

另一個非常常見的錯誤會產生例外——就是試圖訪問列表中不存在的元素:


my_list = [1, 2, 3]
print(my_list[10])
        

會出現例外 IndexError


Traceback (most recent call last):
    print(my_list[10])
        ~~~~~~~^^^^
IndexError: list index out of range
        

總共有多少種呢?有幾千種不同類型的例外。更何況,如果現有的例外不足以描述某種特定情況,你可以創建自己的例外。雖然最熱門的並不多。

2.2 最熱門例外清單

雖然例外很多,但對你這樣的初學者來說,了解最熱門的會很有幫助。以下我會給你一個表格:

例外 描述
Exception 所有例外的基礎類別。
IndexError 當你試圖訪問序列(例如列表或元組)中不存在的索引時發生。
KeyError 當你試圖訪問字典中不存在的鍵時發生。
NameError 當你試圖訪問不存在的變數時發生。
RuntimeError 當其他類型的例外無法描述的執行時錯誤時發生。
StopIteration 用於指示迭代結束。
SyntaxError 當程式碼中有語法錯誤時發生。
IndentationError 程式碼縮排錯誤時發生(SyntaxError 的一種子類型)。
TabError 當縮排中混合使用 Tab 和空格時發生(IndentationError 的一種子類型)。
TypeError 當嘗試對不相容的資料類型執行操作時發生。
UnboundLocalError 在宣告本地變數之前嘗試使用時發生(NameError 的一種子類型)。
ValueError 當函數或操作接收到值不正確的參數時發生。
ZeroDivisionError 當除以零時發生。

你這個新手,可能在學習的第一個月就會遇到這些錯誤。這沒什麼不對的——因為只有在錯誤中學習。

2.3 程式碼中的錯誤

讓我們再探討一些程式碼中會發生錯誤的情況,讓你更容易在自己的程式碼中找到它們:

IndentationError

這種錯誤發生在程式碼中的縮排做得不正確時。例如,混合使用 Tab 和空格或者不正確的縮排量。


def example():
    print("Hello")
     print("World")  # 錯誤的縮排將引發 IndentationError
        
example()
        

NameError


def example():
    print(undeclared_variable)  # 嘗試使用未宣告的變數將引發 NameError
        
example()
        

ValueError

當函數或操作接收到正確類型但不適當值的參數時,會發生這種錯誤。


def example():
    int("abc")  # 嘗試將非數字字符串轉換成整數將引發 ValueError
        
example()
        

KeyError

當程式試圖訪問字典中不存在的鍵時,會發生這種錯誤。


def example():
    my_dict = {"a": 1, "b": 2}
    print(my_dict["c"])  # 嘗試訪問不存在的鍵將引發 KeyError
        
example()
        

SyntaxError

當程式碼中有語法錯誤時,就會發生這種錯誤,也就是說程式碼不符合 Python 語法規則。


def example():
    eval("if True print('Hello')")  # 錯誤的語法將引發 SyntaxError
        
example()
        

知道錯誤在哪裡,就等於有了應對武器。現在你可以識別並創建引發錯誤的情況。是時候學會處理這些錯誤了。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION