這兩行打印的核心區別是 輸出的內容本質不同:前者打印「具體的異常實例(含錯誤詳情)」,後者打印「異常類本身(僅類名/類型)」,實際開發中前者才是有用的調試方式,具體差異拆解如下:

一、核心區別對比表

代碼寫法 打印對象 輸出結果(以除以零為例) 核心用途
print('異常信息:', e) 異常實例(Exception Instance) 異常信息: division by zero 查看「具體錯誤詳情」(如錯誤原因、觸發場景),用於調試、日誌記錄
print('異常信息:', ZeroDivisionError) 異常類(Exception Class) 異常信息: <class 'ZeroDivisionError'> 僅查看「異常的類型名稱」,無實際錯誤細節,幾乎無調試價值

二、原理拆解(為什麼差異這麼大?)

  1. except ZeroDivisionError as e 的本質

    • ZeroDivisionError 是 Python 內置的「異常類」(相當於一個“錯誤模板”,定義了這類錯誤的類型)。
    • 當代碼觸發除以零錯誤時,Python 會自動創建一個 ZeroDivisionError 類的 實例對象 e——這個實例裏包含了「錯誤描述(division by zero)」「錯誤發生位置」等具體信息(相當於用“模板”生成了一個“具體的錯誤報告”)。
    • as e 就是把這個「具體的錯誤報告對象」賦值給變量 e,所以打印 e 會輸出錯誤的實際詳情。
  2. ZeroDivisionError 本身的本質

    • 它是一個「類對象」(不是具體的錯誤事件),打印它只會顯示這個類的“身份信息”(類名和所屬模塊),不會包含任何本次錯誤的具體細節。
    • 就像你想知道“這次考試為什麼不及格”,但只拿到了“不及格”這個標籤,卻沒有拿到具體的錯題分析——毫無實際意義。

三、代碼實測驗證(直觀感受差異)

# 測試代碼
try:
    r = 10 / 0
except ZeroDivisionError as e:
    # 寫法1:打印異常實例 e(推薦)
    print("寫法1(異常實例):", e)
    # 寫法2:打印異常類 ZeroDivisionError(不推薦)
    print("寫法2(異常類):", ZeroDivisionError)
    # 額外補充:查看 e 的類型(驗證 e 是實例)
    print("e 的類型:", type(e))  # 輸出 <class 'ZeroDivisionError'>

輸出結果:

寫法1(異常實例): division by zero
寫法2(異常類): <class 'ZeroDivisionError'>
e 的類型: <class 'ZeroDivisionError'>

從結果能清晰看到:

  • 寫法1 給出了「本次錯誤的具體原因」(division by zero),能直接定位問題;
  • 寫法2 只告訴了「錯誤類型是 ZeroDivisionError」,但不知道這次錯誤到底是怎麼觸發的(雖然這裏簡單場景能猜到,但複雜場景毫無幫助)。

四、實際開發中的使用場景

  1. 推薦用 print('異常信息:', e) 的場景

    • 調試代碼時,快速查看錯誤原因;
    • 記錄日誌時,保存具體錯誤詳情(方便後續排查);
    • 向用户反饋時,展示友好的錯誤提示(如“除數不能為0”)。
  2. **什麼時候會用到 ZeroDivisionError(僅類本身)?**:

    • 定義異常捕獲規則時(如 except ZeroDivisionError: 明確要捕獲這類錯誤);
    • 判斷某個異常實例的類型時(如 isinstance(e, ZeroDivisionError),判斷 e 是否是該類的實例)。

    示例:

    try:
        r = 10 / 0
    except Exception as e:
        # 判斷異常類型是否是 ZeroDivisionError
        if isinstance(e, ZeroDivisionError):
            print("具體錯誤:", e)  # 輸出 division by zero
        else:
            print("其他錯誤:", e)
    

五、總結

對比維度 print('異常信息:', e) print('異常信息:', ZeroDivisionError)
打印內容 具體錯誤詳情(如 division by zero) 異常類的類型標識(如 <class 'ZeroDivisionError'>)
調試價值 極高(直接定位問題) 極低(僅知道錯誤類型,無細節)
實際用途 日常調試、日誌記錄、錯誤反饋 定義捕獲規則、判斷異常類型

一句話結論:實際開發中,只要是想查看錯誤詳情,就用 print('異常信息:', e);永遠不要直接打印異常類本身(除非你只是想確認這個類的存在)。