BaseException 全部異常的基類 Exception 常見錯誤的基類 ArithmeticError 全部數值計算錯誤的基類 Warning 警告的基類 AssertError 斷言語句(assert)失敗 AttributeError 嘗試訪問未知的對象屬性 DeprecattionWarning 關於被棄用的特徵的警告 EOFError 用戶輸入文件末尾標誌EOF(Ctrl+d) FloattingPointError 浮點計算錯誤 FutureWarning 關於構造未來語義會有改變的警告 GeneratorExit generator.close()方法被調用的時候 ImportError 導入模塊失敗的時候 IndexError 索引超出序列的範圍 KeyError 字典中查找一個不存在的關鍵字 KeyboardInterrupt 用戶輸入中斷鍵(Ctrl+c) MemoryError 內存溢出(可經過刪除對象釋放內存) NamerError 嘗試訪問一個不存在的變量 NotImplementedError 還沒有實現的方法 OSError 操做系統產生的異常(例如打開一個不存在的文件) OverflowError 數值運算超出最大限制 OverflowWarning 舊的關於自動提高爲長整型(long)的警告 PendingDeprecationWarning 關於特徵會被遺棄的警告 ReferenceError 弱引用(weak reference)試圖訪問一個已經被垃圾回收機制回收了的對象 RuntimeError 通常的運行時錯誤 RuntimeWarning 可疑的運行行爲(runtime behavior)的警告 StopIteration 迭代器沒有更多的值 SyntaxError Python的語法錯誤 SyntaxWarning 可疑的語法的警告 IndentationError 縮進錯誤 TabError Tab和空格混合使用 SystemError Python編譯器系統錯誤 SystemExit Python編譯器進程被關閉 TypeError 不一樣類型間的無效操做 UnboundLocalError 訪問一個未初始化的本地變量(NameError的子類) UnicodeError Unicode相關的錯誤(ValueError的子類) UnicodeEncodeError Unicode編碼時的錯誤(UnicodeError的子類) UnicodeDecodeError Unicode解碼時的錯誤(UnicodeError的子類) UserWarning 用戶代碼生成的警告 ValueError 傳入無效的參數 ZeroDivisionError 除數爲零
l = [1,2,3,4,5] # 除零錯誤 num = int(input("Please input your num: ")) print(100/num)
Please input your num: 0 --------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-1-8abb196ce2aa> in <module> 2 # 除零錯誤 3 num = int(input("Please input your num: ")) ----> 4 print(100/num) ZeroDivisionError: division by zero
python的異常處理模塊所有語法爲:python
try: 嘗試實現某個操做, 若是沒有出現異常,任務就能夠完成 若是出現異常,將異常從當前代碼塊扔出去嘗試解決異常 except 異常類型1: 解決方案1:用於嘗試在此到處理異常解決問題 except 異常類型2: 解決方案2:用於嘗試在此到處理異常解決問題 except (異常類型1,異常類型2...): 解決方案:針對多個異常使用相同的處理方式 except: 若是沒有出現任何異常,將會執行此處代碼 finally: 有沒有異常都要執行的代碼
流程程序員
# 簡單異常案例 try: num = int(input("Please input your number:")) rst = 100/num print("計算結果是:{}".format(rst)) except: print("輸入錯誤") # exit是退出程序的意思 exit()
Please input your number:0 輸入錯誤
# 簡單異常案例 # 給出提示信息 try: num = int(input("Please input your number:")) rst = 100/num print("計算結果是:{}".format(rst)) # 捕獲異常後,把異常實例化,出錯信息會在實例裏 # 注意如下寫法 # 如下語句是捕獲ZeroDivisionError異常並實例化實例e except ZeroDivisionError as e: print("輸入錯誤") print(e) # exit是退出程序的意思 exit()
# 簡單異常案例 # 給出提示信息 try: num = int(input("Please input your number:")) rst = 100/num print("計算結果是:{}".format(rst)) # 若是是多種error的狀況 # 須要把越具體的錯誤,越往前放 # 在異常類繼承關係中,越是子類的異常,越要往前放, # 越是父類的異常,越要日後放 、 # 在處理異常的時候,一旦攔截到某一個異常,則再也不繼續往下查看,直接進行下一個 # 代碼,即有finally則執行finally語句,否賊就執行下一個大的語句 except ZeroDivisionError as e: print("輸入錯誤") print(e) # exit是退出程序的意思 exit() except NameError as e: print("名字起錯了") print(e) except AttributeError as e: print("屬性錯誤") print(e) exit() # 常見錯誤的基類 # 若是寫下面這句話,常見異常都會攔截住 # 並且下面這句話必定是最後一個excepttion except Exception as e: print("我也不知道就出錯了") print(e) except ValueError as e: print("NO>>>>>>>>>>>") print("hahaha")
Please input your number:ffff 我也不知道就出錯了 invalid literal for int() with base 10: 'ffff' hahaha
# raise 案例 try: print("I love you") print(3.1415926) # 手動引起一個異常 # 注意語法:raise ErrorClassName raise ValueError print("還沒完呀") except NameError as e: print("NameError") except ValueError as e: print("ValueError") except Exception as e: print("有異常") finally: print("我確定會被執行的")
I love you 3.1415926 ValueError 我確定會被執行的
# raise 案例-2 # 自定義異常 # 須要注意:自定義異常必須是系統異常的子類 class DanaValueError(ValueError): pass try: print("I love you") print(3.1415926) # 手動引起一個異常 # 注意語法:raise ErrorClassName raise DanaValueError print("還沒完呀") except NameError as e: print("NameError") # except DanaValueError as e: # print("DanaError") except ValueError as e: print("ValueError") except Exception as e: print("有異常") finally: print("我確定會被執行的")
I love you 3.1415926 ValueError 我確定會被執行的
# else語句案例 try: num = int(input("Please input your number:")) rst = 100/num print("計算結果是:{}".format(rst)) except Exception as e: print("Exceptiong") else: print("No Exception") finally: print("反正我會被執行")
Please input your number:0 Exceptiong 反正我會被執行
在自定義異常的時候,通常包含如下內容:編碼