語法錯誤是指python編譯器在編譯時出現的錯誤,語法分析器會指出出錯的一行並在最新出現問題的位置標記乙個小箭頭及錯誤提示
while
true
print
('hello world'
)file "..\haha.py"
, line 1
while
true
^syntaxerror: invalid syntax
函式 print
() 被檢查到有錯誤,是它前面缺少了乙個冒號(:)
語法錯誤在編譯的時候就會報出,但即便語法是正確的,在執行的時候也有可能發生錯誤,這種執行期檢測到的錯誤稱為異常,下面來幾個示例:
#zerodivisionerror10*
(1/0
)traceback (most recent call last)
: file "..\haha.py"
, line 1,in
10*(1/0
)zerodivisionerror: division by zero
[finished in
0.2s]
#nameerror
4+ spam*
3traceback (most recent call last)
: file "..\haha.py"
, line 1,in
4+ spam*
3nameerror: name 'spam'
isnot defined
#typeerror
'2'+
2traceback (most recent call last)
: file "..\haha.py"
, line 1,in
'2'+
2typeerror: must be str
,not
int
try
:print
('2'+2
)except typeerror as err:
print
('type error:'
,err)
except nameerror:
print
('name error'
)except
(runtimeerror, oserror, ioerror)
:print
('other error'
)except
:print
("unexpected error:"
, sys.exc_info()[
0])raise
else
:print
('no error preform else'
)finally
:print
('must do finally')
結果列印:
type error: must be str
,not
intmust do finally
a.如果沒有異常發生,忽略except子句,try子句執行後結束。
b.如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。
c.如果異常的型別和 except 之後的名稱相符,那麼對應的except子句將被執行。
最後執行 try 語句之後的**。
d.如果乙個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try中。
e.乙個try語句可能有多個except子句,處理不同的特定的異常。最多只有乙個分支會被執行
f.乙個except子句可以同時處理多個異常,這些異常將被放在乙個括號裡成為乙個元組
g.如果前面的except型別都不相符,最後乙個except可以忽略異常名稱,
可以列印乙個錯誤資訊,然後再次把異常丟擲
h.else子句,必須放在所有的except子句之後。在try子句沒有發生任何異常的時候執行
i.不管 try 子句裡面有沒有發生異常,finally 子句都會執行
#使用raise丟擲指定異常
raise nameerror(
)traceback (most recent call last)
: file "..\haha.py"
, line 1,in
raise nameerror(
)
建立乙個新的異常類來擁有自己的異常。異常類繼承自 exception 類,可以直接繼承,或者間接繼承
class
myerror
(exception)
:def
__init__
(self, value)
: self.value = value
def__str__
(self)
:return
repr
(self.value)
raise myerror(
'define my error'
)執行結果:
traceback (most recent call last)
: file "..\haha.py"
, line 7,in
raise myerror(
'define my error'
)__main__.myerror:
'define my error'
一些物件定義了標準的清理行為,無論系統是否成功的使用了它,一旦不需要它了,那麼這個標準的清理行為就會執行
#for迴圈執行結束之後,myfile.txt並不會關閉
for line in
open
("myfile.txt"
): print
(line, end="")
with
open
("myfile.txt"
)as f:
for line in f:
print
(line, end=
'')
python錯誤和異常
1 語法錯誤 syntax errors 語法錯誤,也就是解析時錯誤。當我們寫出不符合python語法 時,在解析時會報syntaxerror,並且會顯示出錯的那一行,並用小箭頭知名指明最早探測到錯誤的位置。如 while ture file line 1 while ture syntaxerro...
Python 錯誤和異常
for i in range 10 print i for i in range 10 syntaxerror invalid syntax python的語法分析器完成,檢測到錯誤所在的檔案和行號,以向上箭頭標記錯誤位置,最後顯示錯誤型別 當程式檢測到乙個錯誤,直譯器就無法繼續執行下去,丟擲異常,...
Python 錯誤和異常
在編寫 的時候,先不管出於什麼原因,在執行階段,可能都看到過一些錯誤的資訊。這些資訊當中 至少 有兩種可區分的錯誤 語法錯誤和異常。語法錯誤也叫解析錯誤,這可能在學習編碼中最容易遇到的錯誤 while true print hello world file line 1 while true pri...