快速答案
本答案頁包含 Python 日誌 的 4 道選擇題、4 道填空題和 4 道輸出預測題,每題都給出準確答案和簡短解釋。
答案已完整展示,建議先嘗試作答,再用本頁核對。第一次練習最好從互動練習頁開始。
日誌器把記錄發送到哪裡?
答案: 它的處理器
為什麼: 處理器負責目的地;日誌器把記錄交給它們。
根日誌器的預設級別是什麼?
答案: WARNING
為什麼: 沒有額外設定時,根日誌器通常處理 WARNING 及以上。
日誌器級別為 WARNING 時呼叫 logger.info 會怎樣?
答案: 該日誌器不發出記錄
為什麼: INFO 低於 WARNING 門檻值,所以記錄會被過濾。
格式化器會做什麼?
答案: 把記錄轉換成文字
為什麼: 格式化器控制處理器最終輸出的文字布局。
補全資訊性訊息的級別。
import logging
logger = logging.getLogger("demo")
logger.setLevel(logging.____)答案: INFO
為什麼: logging.INFO 是資訊性級別。
補全寫入流的處理器。
import logging
from io import StringIO
stream = StringIO()
handler = logging.____(stream)答案: StreamHandler
為什麼: StreamHandler 把記錄寫入 StringIO 等流。
補全控制文字布局的類。
import logging
from io import StringIO
handler = logging.StreamHandler(StringIO())
handler.setFormatter(logging.____("%(levelname)s:%(message)s"))答案: Formatter
為什麼: Formatter 把記錄變成最終字串。
補全阻止向根日誌器傳播的值。
import logging
logger = logging.getLogger("demo")
logger.propagate = ____答案: False
為什麼: 把 propagate 設為 False 可以讓記錄留在目前日誌器的處理器鏈中。
這段程式列印出什麼?
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 寫入流。
程式碼的輸出結果是什麼?
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 記錄會被發出。
螢幕上會顯示什麼?
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
為什麼: 格式化器把級別名稱放在訊息前面。
這段程式碼會輸出什麼?
import logging
print(logging.getLevelName(20))答案: INFO
為什麼: 級別 20 的名稱是 INFO。
先試一遍題目
打開 Python 日誌 練習頁,用即時回饋回答同樣的 12 道題。