答案頁 · 12 道題

Python 日誌練習答案

本頁彙整 Python 日誌 的 12 道練習。先做練習頁,再回到這裡核對準確答案和原因。

快速答案

本答案頁包含 Python 日誌 的 4 道選擇題、4 道填空題和 4 道輸出預測題,每題都給出準確答案和簡短解釋。

答案已完整展示,建議先嘗試作答,再用本頁核對。第一次練習最好從互動練習頁開始。

01 · 選擇題

日誌器把記錄發送到哪裡?

  1. 只發送到終端
  2. 它的處理器正確答案
  3. 字串列表
  4. 預設發送到資料庫

答案: 它的處理器

為什麼: 處理器負責目的地;日誌器把記錄交給它們。

02 · 選擇題

根日誌器的預設級別是什麼?

  1. WARNING正確答案
  2. INFO
  3. ERROR
  4. DEBUG

答案: WARNING

為什麼: 沒有額外設定時,根日誌器通常處理 WARNING 及以上。

03 · 選擇題

日誌器級別為 WARNING 時呼叫 logger.info 會怎樣?

  1. 該日誌器不發出記錄正確答案
  2. 拋出錯誤
  3. 訊息列印兩次
  4. 級別自動變成 INFO

答案: 該日誌器不發出記錄

為什麼: INFO 低於 WARNING 門檻值,所以記錄會被過濾。

04 · 選擇題

格式化器會做什麼?

  1. 改變日誌器級別
  2. 把記錄儲存到檔案
  3. 刪除舊處理器
  4. 把記錄轉換成文字正確答案

答案: 把記錄轉換成文字

為什麼: 格式化器控制處理器最終輸出的文字布局。

05 · 填空題

補全資訊性訊息的級別。

import logging
logger = logging.getLogger("demo")
logger.setLevel(logging.____)

答案: INFO

為什麼: logging.INFO 是資訊性級別。

06 · 填空題

補全寫入流的處理器。

import logging
from io import StringIO
stream = StringIO()
handler = logging.____(stream)

答案: StreamHandler

為什麼: StreamHandler 把記錄寫入 StringIO 等流。

07 · 填空題

補全控制文字布局的類。

import logging
from io import StringIO
handler = logging.StreamHandler(StringIO())
handler.setFormatter(logging.____("%(levelname)s:%(message)s"))

答案: Formatter

為什麼: Formatter 把記錄變成最終字串。

08 · 填空題

補全阻止向根日誌器傳播的值。

import logging
logger = logging.getLogger("demo")
logger.propagate = ____

答案: False

為什麼: 把 propagate 設為 False 可以讓記錄留在目前日誌器的處理器鏈中。

09 · 輸出預測

這段程式列印出什麼?

import logging
from io import StringIO
stream = StringIO()
handler = logging.StreamHandler(stream)
logger = logging.getLogger("demo")
logger.handlers[:] = [handler]
logger.setLevel(logging.INFO)
logger.propagate = False
logger.info("hello")
print(stream.getvalue().strip())

答案: hello

為什麼: 處理器收到 info 記錄,把 hello 寫入流。

10 · 輸出預測

程式碼的輸出結果是什麼?

import logging
from io import StringIO
stream = StringIO()
logger = logging.getLogger("demo")
logger.handlers[:] = [logging.StreamHandler(stream)]
logger.setLevel(logging.WARNING)
logger.propagate = False
logger.info("hidden")
logger.warning("shown")
print(stream.getvalue().strip())

答案: shown

為什麼: info 記錄低於門檻值,warning 記錄會被發出。

11 · 輸出預測

螢幕上會顯示什麼?

import logging
from io import StringIO
stream = StringIO()
handler = logging.StreamHandler(stream)
handler.setFormatter(logging.Formatter("%(levelname)s:%(message)s"))
logger = logging.getLogger("demo")
logger.handlers[:] = [handler]
logger.setLevel(logging.INFO)
logger.propagate = False
logger.warning("check")
print(stream.getvalue().strip())

答案: WARNING:check

為什麼: 格式化器把級別名稱放在訊息前面。

12 · 輸出預測

這段程式碼會輸出什麼?

import logging
print(logging.getLevelName(20))

答案: INFO

為什麼: 級別 20 的名稱是 INFO。

先試一遍題目

打開 Python 日誌 練習頁,用即時回饋回答同樣的 12 道題。

練習本課