標籤:分享圖片 code 不同的 world zha 代碼 int() class git
github部落格傳送門
csdn部落格傳送門
Python 錯誤和異常語法錯誤
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子句(在關鍵字try和關鍵字except之間的語句)
如果沒有異常發生,忽略except子句,try子句執行後結束。
如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。如果異常的類型和
except 之後的名稱相符,那麼對應的except子句將被執行。最後執行 try 語句之後的代碼。
如果一個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try中。
一個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多隻有
一個分支會被執行。
處理常式將只針對對應的try子句中的異常進行處理,而不是其他的 try 的處理程
序中的異常。
一個except子句可以同時處理多個異常,這些異常將被放在一個括弧裡成為一個
元組,例如:
except (RuntimeError, TypeError, NameError):
Try except 還有一個 else 可選子句
如果使用這個子句,那麼必須放在所有
的except子句之後。這個子句將在try子句沒有發生任何異常的時候執行。例如:
def div(a,b): try: a/b except 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錯誤和異常