github部落格傳送門
csdn部落格傳送門
python 的語法錯誤或者稱之為解析錯,是初學者經常碰到的,如下例項:
while true print('hello world')
就會出現如下錯誤資訊:
函式 print() 被檢查到有錯誤,是它前面缺少了乙個冒號(:)。
語法分析器指出了出錯的一行,並且在最先找到的錯誤的位置標記了乙個小小的箭頭。
執行期檢測到的錯誤被稱為異常。
例:
print(1/0)
4 + spam*3
'2' + 2
異常以不同的型別出現,這些型別都作為資訊的一部分列印出來: 例子中的型別
有zerodivisionerror,nameerror 和 typeerror。
python中使用try except 語句來捕獲並處理異常。
例:
def div(a,b):
try:
return a/b
except zerodivisionerror:
print("除數不能為0")
div(3,0)
首先,執行try子句(在關鍵字try和關鍵字except之間的語句)
如果沒有異常發生,忽略except子句,try子句執行後結束。
如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。如果異常的型別和
except 之後的名稱相符,那麼對應的except子句將被執行。最後執行 try 語句之後的**。
如果乙個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try中。
乙個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多只有
乙個分支會被執行。
處理程式將只針對對應的try子句中的異常進行處理,而不是其他的 try 的處理程
序中的異常。
乙個except子句可以同時處理多個異常,這些異常將被放在乙個括號裡成為乙個
元組,例如:
except (runtimeerror, typeerror, nameerror):
如果使用這個子句,那麼必須放在所有
的except子句之後。這個子句將在try子句沒有發生任何異常的時候執行。例如:
def div(a,b):
try:
a/bexcept zerodivisionerror as zero:
print("除數不能為0",zero)
else:
print("沒有捕獲到異常")
div(3,4)
使用 else 子句比把所有的語句都放在 try 子句裡面要好,這樣可以避免一些意想不到的、而except又沒有捕獲的異常。
異常處理並不僅僅處理那些直接發生在try子句中的異常,而且還能處理子句中調
用的函式(甚至間接呼叫的函式)裡丟擲的異常。例如:
def this_fails():
x = 1 / 0
try:
this_fails()
except zerodivisionerror as err:
print('捕獲到異常:', err)
python 使用 raise 語句丟擲乙個指定的異常。例如:
raise nameerror('hithere')
raise 唯一的乙個引數指定了要被丟擲的異常。它必須是乙個異常的例項或者是異常的類(也就是 exception 的子類)。
如果你只想知道這是否丟擲了乙個異常,並不想去處理它,那麼乙個簡單的 raise 語句就可以再次把它丟擲。
try:
raise nameerror('hithere')
except nameerror:
print('乙個異常被丟擲啦!')
raise
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錯誤和異常
語法錯誤是指python編譯器在編譯時出現的錯誤,語法分析器會指出出錯的一行並在最新出現問題的位置標記乙個小箭頭及錯誤提示 while true print hello world file haha.py line 1 while true syntaxerror invalid syntax 函...