簡體   English   中英

在自定義異常構造函數中是否有任何要記錄消息的警告?

[英]Are there any caveats to log messages in custom exception constructor?

每次我捕獲異常時,我都希望對其進行記錄,因此將其放入Exception構造函數中是否明智? 我在這里挖自己的墳墓嗎?

import logging


logger = logging.getLogger(__name__)


class GatewayException(Exception):
    message = None

    def __init__(self, message, *args, **kwargs):
        super(GatewayException, self).__init__(message)
        self.message = message
        self.__dict__.update(kwargs)
        logger.error(message)
        for key, value in kwargs.items():
            logger.error("{} : {}".format(key, value))

我建議在GatewayException類本身中省略logger調用。

您當前編寫的代碼使用全局 logger對象,該對象違反了封裝,如果要在其他類別/模塊/等其他位置使用記錄器,則可能會出現問題。

為了解決這個問題,你可以在通過loggerGatewayException構造,但如果你實際上並不希望記錄在一個特定的東西有什么except呢?

為了允許這種可能性,如果將消息封裝在異常內,而忽略了logger調用,則可以在except選擇是否使用本地logger對象logger錯誤,無論使用哪種方法。

為確保格式一致,可以將格式/輸出代碼集中到一個__str__函數中,該函數從內部引用class成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM