在程序运行时,是否可以确定Python中一行的缩进级别?我希望能够根据正在运行的脚本的大纲结构来组织日志文件。在
在下面的示例中,“first message”函数将生成0,“second message”将为1,“third message”为2,“fourth,fifth,sixth”消息将为0
logger.debug('First message')
if True:
logger.info('Second message')
if True:
logger.info('Third message')
logger.warning('Fourth message')
logger.error('Fifth message')
logger.critical('Sixth message')
相应的日志文件如下所示:
^{pr2}$
首先,我检索调用者的代码上下文:
这给了我一个代码行的列表;除了第一行之外,我忽略了所有代码行。然后,我使用正则表达式来获取此行开头的空白;如果使用制表符,则必须先用适当数量的空格替换它们:
^{pr2}$出于测试目的,我将空格替换为点,这样我就可以看到发生了什么,并构建了我的前缀:
{我现在可以使用CDlogger修改此消息:
^{4}$如果我可以简单地用一个修饰符包装一个现有的记录器,将这个记录器转换成一个能识别空白的记录器,那就太好了。假设出于测试目的,我有一个非常原始的记录器,它只是将消息打印到stdout:
此记录器具有日志消息的第一个参数,可能还有一些其他位置参数和关键字。我想为这样一个函数编写一个装饰器:
现在我可以得到一个新的记录器,例如:
把它们放在一起可以得到:
不过,在生产代码中使用它,我会很犹豫。使用这样的代码检查是很脆弱的,并且根据您调用它的位置,它可能会导致意外的效果。在
我可以使用inspect.getouterframes()功能。这假设缩进使用4''字符而不是'\t'字符。在
相关问题 更多 >
编程相关推荐