不要为单个功能记录警告

时间:2019-09-17 01:37:52

标签: python logging

说我对人及其年龄有一个决定。

ages = {"Tom": 44, "Amy": 15, "Dude": 23, "Namey McNameface": 71}

然后我想检查是否有人可以开车。如果法律上不允许他们这样做,则应提出警告。

import logging
logger = logging.getLogger(__name__)

def can_drive_car(name):
    if ages[name] < 16:
        logger.warning("{} shouldn't be doing that".format(name))
        return False
    return True

if can_drive_car("Dude"): force_to_drive_me_home("Dude")

我想拥有一个功能,该功能可以合法地获得所有人的名字。因为要求非常复杂,所以检查功能最简单的方法是调用仅检查一个人并返回该功能返回True的所有人的功能。

def get_everyone_who_can_drive():
    return [p for p in ages.keys() if can_drive_car(p)]

>>> get_everyone_who_can_drive()
["Tom", "Dude", "Namey McNameface"]

太好了!现在,我有了一个清单,每个人都可以将我送回家而无需坐牢。

问题:我调用了一个函数,该函数在评估Amy时会发出警告。问题是,我并没有特别检查Amy,所以即使我希望在对每个人进行评估时都出现该警告,但我不希望在同时评估每个人时出现该警告。

通过仅更改get_everyone_who_can_drive,不传递任何参数,并且不对程序进行结构调整甚至使其变得有些理智,该如何防止警告出现?

1 个答案:

答案 0 :(得分:0)

将日志记录从功能def can_drive_car(name): return ages[name] >= 16 if can_drive_car("Dude"): force_to_drive_me_home("Dude") else: logger.warning("Dude shouldn't be doing that") 移动到调用该功能的代码

import logging
logger = logging.getLogger(<name of module>)
previous_level = logger.level
logger.setLevel(logging.ERROR)
get_everyone_who_can_drive()
logger.setLevel(previous_level)

现在您的理解力将不会记录警告

编辑:

如果您可以访问生成警告的记录器,则可以将日志级别设置为更高的级别(例如ERROR),这样就不会记录警告

declare global {
    namespace NodeJS {
        interface Process {
            _getActiveHandles(): any[];
        }
    }
}