程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

一文讀懂Python異常

編輯:Python

Python異常

目錄

  • 1什麼是異常?
  • 2 python中常見異常
  • 3異常的捕獲
  • 4 異常跟蹤

1什麼是異常?

異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。一般情況下,在Python無法正常處理程序時就會發生一個異常。異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行

2 python中常見異常

關鍵字:try、except、finally、else、raise

python中捕捉異常模塊try/except,其中python中有一些自定義的異常,具體如下

  • AttributeError 調用不存在的方法引發的異常

  • EOFError 遇到文件末尾引發的異常`

  • ImportError 導入模塊出錯引發的異常

  • IndexError 列表越界引發的異常

  • IOError I/O操作引發的異常,如打開文件出錯等

  • KeyError 使用字典中不存在的關鍵字引發的異常

  • NameError 使用不存在的變量名引發的異常

  • TabError 語句塊縮進不正確引發的異常

  • ValueError 搜索列表中不存在值引發的異常

  • ZeroDivisionError 除數為零引發的異常

3異常的捕獲

try:
except Exception:
finally:
  • 自定義異常

    # 自定義異常類
    class AgeError(Exception):
    def __init__(self, age):
    self.__age = age
    # 重寫str方法
    def __str__(self):
    return "您傳入的年齡不滿足需求:age=%d" % self.__age
    age =10
    try:
    raise AgeError(age)
    except Exception as e:
    print(e)
    

    traceback.print_exc()實現 通過 系統角度 打印後繼續執行

    這樣捕捉到異常後程序還會繼續往後執行,如果不捕捉的話,那麼拋出該運行時異常程序則會中斷

    注:實體類中 要有__enter__ __exit__函數,分別 負責初始化以及清理工作

  • if else 異常模式

    try:
    <語句> #運行別的代碼
    except <名字>:
    <語句> #如果在try部份引發了'name'異常
    except <名字>,<數據>:
    <語句> #如果引發了'name'異常,獲得附加的數據
    else:
    <語句> #如果沒有異常發生
    
  • 多異常處理

    ...
    except(ZeroDivisionError, TypeError, NameError):
    ...
    
  • try-finally 語句

    任何情況下都會執行finall中的語句

    try:
    <語句>
    finally:
    <語句> #退出try時總會執行
    raise
    
  • with as取代try-finally

    • 要求

      with所求值的對象必須有一個__enter__()方法,一個__exit__()方法

    with 實體類 as 返回值
    方法或函數體
    class Sample:
    def __enter__(self):
    print("In __enter__()")
    def __exit__(self, type, value, trace):
    print("In __exit__()")
    S=Sample()
    with S as sample:
    raise Exception("錯誤出現")
    

4 異常跟蹤

try:
c = 1 / 0
except Exception as e:
#收集出現的錯誤
info = sys.exc_info()
#跟蹤該錯誤信息,limit參數為打印跟蹤的條目
traceback.print_tb(info[2])
print(info)

補充一下 日志打印 用 log


  1. 上一篇文章:
  2. 下一篇文章:
相關文章
    没有相关文章
Copyright © 程式師世界 All Rights Reserved