作為 python 初學者,在剛學習 python 程式設計時,經常會看到一些報錯資訊。python 有兩種錯誤很容易辨認:語法錯誤和異常。
語法錯誤又稱解析錯誤,是在學習python 時最容易遇到的錯誤:
while
true
print
('hello world'
)'''
file "/users/clay/desktop/python/demo.py", line 1
while true
^syntaxerror: invalid syntax
'''
這個例子指出true後面少了乙個冒號:,解析器會輸出出現語法錯誤的那一行,並顯示乙個「箭頭」,指向這行裡面檢測到第乙個錯誤,檔名和行號也會被輸出,以便輸入來自指令碼檔案時你能知道去哪檢查。
即使語句或表示式在語法上是正確的,但在嘗試執行時,它仍可能會引發錯誤。 在執行時檢測到的錯誤被稱為異常,異常不一定會導致嚴重後果,但是,大多數異常並不會被程式處理,此時會顯示如下所示的錯誤資訊。
print(10
/0)#這個表示式在語法上是沒有錯誤的
'''traceback (most recent call last):
file "/users/clay/desktop/python/demo.py", line 1, in print(10 / 0)
zerodivisionerror: division by zero
'''
錯誤資訊的最後一行告訴我們程式遇到了什麼型別的錯誤,異常有不同的型別,而其型別名稱將會作為錯誤資訊的一部分中列印出來,這一行的剩下的部分根據異常型別及其原因提供詳細資訊。
異常名稱
描述baseexception
所有異常的基類
exception
常規錯誤的基類
stopiteration
迭代器沒有更多的值
systemexit
直譯器請求退出
overflowerror
數值運算超出最大限制
zerodivisionerror
除或取模運算的第二個引數為0
attributeerror
物件沒有這個屬性
keyerror
對映中沒有這個鍵
indentationerror
縮排錯誤
valueerror
傳入無效的引數
warning
警告的基類
在python中可以用try/except來進行異常的處理
while
true
:try
: x =
int(
input
('請輸入乙個數字'))
print
(x)break
except valueerror:
print
('您輸入的不是數字,請再次嘗試!'
)
try語句的工作原理:
try/except還有可選語句else和finally
try
: 執行**
except 異常型別 as異常名:
發生異常時執行的**
else
: 沒有異常時執行的**
finally
: 不管有沒有異常都會執行的**
程式設計師可以用raise語句強制丟擲乙個指定的型別
raise語法格式如下:
raise
[exception [
, args [
, traceback]
]]
比如我們要求不能輸入5以上的數字,否則就會丟擲錯誤,**如下:
x =
10if x >5:
raise exception(
'x不能大於5'
)'''
traceback (most recent call last):
file "/users/clay/desktop/python/demo.py", line 3, in raise exception('x不能大於5')
exception: x不能大於5
'''
程式可以通過建立新的異常類來命名它們自己的異常,異常類繼承自 exception 類,可以直接繼承,或者間接繼承。
class
myerror
(exception)
:pass
defmyerror
(a,b)
:if a>b:
raise myerror(
'a不能大於b'
)myerror(4,
3)'''traceback (most recent call last):
file "/users/clay/desktop/python/demo.py", line 6, in myerror(4,3)
file "/users/clay/desktop/python/demo.py", line 5, in myerror
raise myerror('a不能大於b')
__main__.myerror: a不能大於b
'''
myerror是我們自己定義異常型別,如果不滿足程式要求,就丟擲異常。大多數異常都定義為名稱以「error」結尾,類似於標準異常的命名。 python學習筆記 錯誤處理
程式中的錯誤處理有多種方式,一類是約定好錯誤碼,然後根據返回的錯誤碼來判斷是否發生錯誤,以及錯誤的原因。但是這麼做容易將正確的返回值和錯誤碼混在一起,必須要寫很多 來區分,非常不方便。另外一旦出錯,還需要一級一級往上報,知道有一級可以處理它。比較成熟的做法是try.except.finally.這一...
Python學習筆記 錯誤 除錯和測試
根據廖雪峰python教程整理 在程式執行過程中,總會遇到各種各樣的錯誤。有的錯誤是程式編寫有問題造成的,比如本來應該輸出整數結果輸出了字串,這種錯誤我們通常稱之為bug bug 是必須修復的。有的錯誤是使用者輸入造成的,比如讓使用者輸入email 位址,結果得到乙個空字串,這種錯誤可以通過檢查使用...
matlab程式設計筆記 錯誤集錦
總結一些自己遇到過的使人抓狂的報錯,往往是自己粗心大意造成的 disp jafjjaja index exceeds matrix dimensions 原因 前面把disp定義為變數了,程式設計的時候千萬要注意噢!已存在的函式名不能用作變數名 find a b ans empty matrix 1...