這篇文章帶給大家的內容是關於python的錯誤與異常處理,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
一:語法錯誤syntax errors
熟悉語法!
二:異常
①列印錯誤訊息時,異常的類型會以異常的內建名稱顯示,並以呼叫堆疊的形式顯示具體訊息
②常見的異常:
NameError、
ZeropisionError、
# IndexError 索引超出序列範圍
KeyError 錯誤
AttributeError嘗試存取未知的物件屬性
三:異常處理
while True: try: x = int(input("Please enter a number: ")) break except ValueError: print("Oops! That was no valid number. Try again ")
③如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。
④如果異常的類型和 except 之後的名稱相符,那麼對應的except子句將被執行。最後執行 try 語句之後的程式碼。
⑤如果一個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try。
⑥一個 try 語句可能包含多個except子句,分別來處理不同的特定的例外。最多只有一個分支會被執行。
⑦一個except子句可以同時處理多個異常,這些異常將被放在一個括號裡成為一個元組。
except (RuntimeError, TypeError, NameError): pass
三:拋出異常
raise 唯一的一個參數指定了要被拋出的異常。
它必須是一個異常的實例或是異常的類別(也就是Exception 的子類別)
四:使用者自訂例外
異常類別繼承自 Exception 類,可直接繼承,或間接繼承。
當創建一個模組有可能拋出多種不同的異常時, 一種通常的做法是為這個包建立一個基礎異常類,
五:定義清理行為
try: raise KeyboardInterrupt finanlly: print("dooo")不管try 子句裡面有沒有發生異常,finally 子句都會執行
如果一個異常在try 子句裡(或在except 和else 子句裡)被拋出,
而又沒有任何的except 把它截住,那麼這個異常會在finally 子句執行後再次被拋出
六:擴展------------->斷言機制
用途: 防禦性的程序
》# ---------------------------------------------------------------------# # 异常处理 # ---------------------------------------------------------------------# while True: try: x = int(input("Please enter a number: ")) break except ValueError: print("Oops! That was no valid number. Try again ") # ---------------------------------------------------------------------# # 抛出异常 # ---------------------------------------------------------------------# """ try: raise NameError('HiThere') except NameError: print('An exception flew by!') raise """ # ---------------------------------------------------------------------# # 用户自定义异常 # ---------------------------------------------------------------------# class MyError(Exception): # 继承自Exception def __init__(self, value): # 构造函数重写 self.value = value def __str__(self): return repr(self.value) try: raise MyError(2*2) # 抛出异常 except MyError as e: print('My exception occurred, value:', e.value) # 当创建一个模块有可能抛出多种不同的异常时, # 一种通常的做法是为这个包建立一个基础异常类, # 然后基于这个基础类为不同的错误情况创建不同的子类 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 class TransitionError(Error): """Raised when an operation attempts a state transition that's not allowed. Attributes: previous -- state at beginning of transition next -- attempted new state message -- explanation of why the specific transition is not allowed """ def __init__(self, previous, next1, message): self.previous = previous self.next = next1 self.message = message try: raise InputError(2*2, 45) # 抛出异常 except InputError: # 处理异常 print('My exception occurred') # ---------------------------------------------------------------------# # 定义清理行为 # ---------------------------------------------------------------------# def divide(x, y): try: result = x / y except ZeroDivisionError: print("division by zero!") else: # 没有异常的时执行 print("result is", result) finally: # 无论在任何情况下都会执行的清理行为 print("executing finally clause") # 一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出, # 而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后再次被抛出 # divide("2", "1") #从测试代码
以上是python的錯誤與異常處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!