python中常見的錯誤
阿新 • • 發佈:2019-01-31
一、常見的錯誤型別
1.NameError:嘗試訪問一個未宣告的變數
File "<pyshell#0>", line 1, in <module>
py
NameError: name 'py' is not defined
NameError?表示我們訪問了一個沒有初始化的變數.
2.ZeroDivisionError:除數為零
File "<pyshell#1>", line 1, in <module>
1/0
ZeroDivisionError: division by zero
3.SyntaxError:Python 直譯器語法錯誤
SyntaxError: invalid syntax
SyntaxError 異常是唯一不是在執行時發生的異常. 它代表 Python 程式碼中有一個不正確的結構, 在它改正之前程式無法執行. 這些錯誤一般都是在編譯時發生, Python 直譯器無法把你的指令碼轉化為 Python 位元組程式碼.
4.IndexError:請求的索引超出序列範圍
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
list[1]
IndexError: list index out of range
5.KeyError:請求一個不存在的字典關鍵字
>>> print(dict['PY'])
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
print(dict['PY'])
KeyError: 'PY'
對映物件, 例如字典, 是依靠關鍵字(keys)訪問資料值的. 如果使用錯誤的或是不存在的鍵請求字典就會引發一個 KeyError異常.
6.IOError:輸入/輸出錯誤
File "<pyshell#8>", line 1, in <module>
f = open('py')
FileNotFoundError: [Errno 2] No such file or directory: 'py'
類似嘗試開啟一個不存在的磁碟檔案一類的操作會引發一個作業系統輸入/輸出(I/O)錯誤. 任何型別的 I/O 錯誤都會引發 IOError 異常.
7.AttributeError:嘗試訪問未知的物件屬性
pass
>>> myInst = myClass()
>>> myInst.py = 'python'
>>> myInst.py
'python'
>>> myInst.PY
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
myInst.PY
AttributeError: 'myClass' object has no attribute 'PY'
myInst.py 儲存了一個值, 也就是例項 myInst 的 py 屬性. 屬性被定義後, 可以使用熟悉的點/屬性操作符訪問它, 但如果是沒有定義屬性, 例如訪問 PY 屬性, 將導致一個 AttributeError 異常.
二、檢測和處理異常
異常可以通過 try 語句來檢測。任何在 try 語句塊裡的程式碼都會被監測,檢查有無異常發生。
1.NameError:嘗試訪問一個未宣告的變數
>>> py
Traceback (most recent call last):File "<pyshell#0>", line 1, in <module>
py
NameError: name 'py' is not defined
NameError?表示我們訪問了一個沒有初始化的變數.
2.ZeroDivisionError:除數為零
>>> 1/0
Traceback (most recent call last):File "<pyshell#1>", line 1, in <module>
1/0
ZeroDivisionError: division by zero
3.SyntaxError:Python 直譯器語法錯誤
>>> if
SyntaxError 異常是唯一不是在執行時發生的異常. 它代表 Python 程式碼中有一個不正確的結構, 在它改正之前程式無法執行. 這些錯誤一般都是在編譯時發生, Python 直譯器無法把你的指令碼轉化為 Python 位元組程式碼.
4.IndexError:請求的索引超出序列範圍
>>> list=['python']
>>> list[1]Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
list[1]
IndexError: list index out of range
5.KeyError:請求一個不存在的字典關鍵字
>>> dict = {'py':'pythong'}
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
print(dict['PY'])
KeyError: 'PY'
對映物件, 例如字典, 是依靠關鍵字(keys)訪問資料值的. 如果使用錯誤的或是不存在的鍵請求字典就會引發一個 KeyError異常.
6.IOError:輸入/輸出錯誤
>>> f = open('py')
Traceback (most recent call last):File "<pyshell#8>", line 1, in <module>
f = open('py')
FileNotFoundError: [Errno 2] No such file or directory: 'py'
類似嘗試開啟一個不存在的磁碟檔案一類的操作會引發一個作業系統輸入/輸出(I/O)錯誤. 任何型別的 I/O 錯誤都會引發 IOError 異常.
7.AttributeError:嘗試訪問未知的物件屬性
>>> class myClass(object):
>>> myInst = myClass()
>>> myInst.py = 'python'
>>> myInst.py
'python'
>>> myInst.PY
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
myInst.PY
AttributeError: 'myClass' object has no attribute 'PY'
myInst.py 儲存了一個值, 也就是例項 myInst 的 py 屬性. 屬性被定義後, 可以使用熟悉的點/屬性操作符訪問它, 但如果是沒有定義屬性, 例如訪問 PY 屬性, 將導致一個 AttributeError 異常.
二、檢測和處理異常
異常可以通過 try 語句來檢測。任何在 try 語句塊裡的程式碼都會被監測,檢查有無異常發生。
try 語句有兩種主要形式: try-except 和 try-finally . 這兩個語句是互斥的, 也就是說你只 能 使 用 其 中 的 一 種 . 一 個 try 語 句 可 以 對 應 一 個 或 多 個 except 子 句 , 但 只 能 對 應 一 個 finally 子句, 或是一個 try-except-finally 複合語句.
你可以使用 try-except 語句檢測和處理異常. 你也可以新增一個可選的 else 子句處理沒有探測到異常的時執行的程式碼. 而 try-finally 只允許檢測異常並做一些必要的清除工作(無論發生錯誤與否), 沒有任何異常處理設施. 正如你想像的, 複合語句兩者都可以做到.