前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
作者:solo
本次分享Python錯誤與例外,主要知識點如下:
- 語法錯誤
- 例外
- 例外處理
- 拋出例外
- 自定義例外
- 實體
語法錯誤
SyntaxError 類表示語法錯誤,當解釋器發現代碼無法通過語法檢查時會觸發的錯誤,語法錯誤是無法用 try...except...捕獲的,
>>> print: File "<stdin>", line 1 print: ^ SyntaxError: invalid syntax
例外
Python使用被稱為例外的特殊物件來管理程式執行期間發生的錯誤,每當發生讓Python不知所措的錯誤時,它都會創建一個例外物件,如果撰寫了處理例外的代碼,程式將繼續運行;如果未對例外做處理,程式將進行停止,并顯示一個traceback,其中包含有關例外的報告,
例外處理
print(5/0)
運行結果:
Traceback (most recent call last): File "檔案與例外/檔案與例外.py", line 228, in <module> print(5/0) ZeroDivisionError: division by zero
例外處理使用以下格式:
try-except代碼塊 try: print(5/0) except ZeroDivisionError: print("can't divide by zero") #結果 print("can't divide by zero") 拋出例外
拋出例外
使用 raise 陳述句拋出一個指定的例外,
raise 唯一的一個引數指定了要被拋出的例外,它必須是一個例外的實體或者是例外的類(也就是 Exception 的子類),
如果你只想知道這是否拋出了一個例外,并不想去處理它,那么一個簡單的 raise 陳述句就可以再次把它拋出,
自定義例外
可以通過創建一個新的例外類來擁有自己的例外,例外類繼承自 Exception 類,可以直接繼承,或者間接繼承,
當創建一個模塊有可能拋出多種不同的例外時,一種通常的做法是為這個包建立一個基礎例外類,然后基于這個基礎類為不同的錯誤情況創建不同的子類,
大多數的例外的名字都以”Error”結尾,就跟標準的例外命名一樣,
實體
import sys class Error(Exception): """Base class for exceptions in this module.""" pass # 自定義例外 class InputError(Error): """Exception raised for errors in the input. Attributes: expression -- input expression in which the error occurred message -- explanation of the error """ def __init__(self, expression, message): self.expression = expression self.message = message try: print('code start running...') raise InputError('input()', 'input error') # ValueError int('a') # TypeError s = 1 + 'a' dit = {'name': 'john'} # KeyError print(dit['1']) except InputError as ex: print("InputError:", ex.message) except TypeError as ex: print('TypeError:', ex.args) pass except (KeyError, IndexError) as ex: """支持同時處理多個例外, 用括號放到元組里""" print(sys.exc_info()) except: """捕獲其他未指定的例外""" print("Unexpected error:", sys.exc_info()[0]) # raise 用于拋出例外 raise RuntimeError('RuntimeError') else: """當無任何例外時, 會執行 else 子句""" print('"else" 子句...') finally: """無論有無例外, 均會執行 finally""" print('finally, ending')
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110806.html
標籤:Python
