gpt4 book ai didi

python - 如何防止日志记录代码使实际代码困惑?

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:43 24 4
gpt4 key购买 nike

我正在编写一些代码,其中一半代码似乎在记录和计时各种事情。我发现这混淆了真正的代码。我想知道有什么方法可以仍然记录所有内容,但清楚地将日志记录和实际代码分开?

例如一些代码块可以做一些简单的事情:

for item in files:
parsed_item = parse_item(item)

但是记录它可能会产生更多的代码,从而使真实代码变得困惑,例如

folders = 0
files = 0
paid_users = 0
free_users = 0

for item in files:
parsed_item = parse_item(item)

if parsed_item['isFolder']:
folders += 1
else:
files += 1

if parsed_item['isPaidUser']:
paid_users += 1
else:
free_users += 1

logger.info('Parsed: %d folders %d files %d paid users %d free users' % folders, files, paid_users, free_users)

如果我们对代码块使用装饰器或上下文管理器,然后在 __exit__() 方法上做一些日志记录,可能会有一些更清晰的东西,例如

with parse_files_logger() as logger:
for item in files:
parsed_item = parse_item(item)
logger.log(parsed_item)

但很想知道是否有更清洁的替代品?

最佳答案

您可以利用这样一个事实,即可以向记录器传递一些其他对象而不是字符串,并且该对象从 str(object) 返回的值用于确定消息。因此:

class ParsedItemInfo(object):
def __init__(self):
self.folders = self.files = self.paid_users = self.free_users = 0

def add(self, item):
if item['isFolder']:
self.folders += 1
else:
self.files += 1

if item['isPaidUser']:
self.paid_users += 1
else:
self.free_users += 1

def __str__(self):
return 'Parsed: %d folders %d files %d paid users %d free users' % (self.folders, self.files, self.paid_users, self.free_users)

然后在您的“真实代码”中:

parsed_item_info = ParsedItemInfo()

for item in files:
parsed_item = parse_item(item)
parsed_item_info.add(parsed_item)

logger.info(parsed_item_info)

关于python - 如何防止日志记录代码使实际代码困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37856995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com