1

以下函数报告发生运行时异常时我想从其他函数中调用的“当前”行号(和时间)。

可以理解,返回的行号总是与 gTime() 函数本身中 getframeinfo 的位置相关,即它是静态的。

每当我需要 line.num/time 数据时,我只需要 gTime() 功能,而无需将(长)gTime 代码直接添加到主代码主体中需要它的每个位置。我猜想某种命令序列别名是我真正想要替换的 gTime() 函数中的代码 - 但找不到任何解决我的问题的方法。

标准的“记录器”模块在我的多线程应用程序中无法可靠地工作,所以我求助于手动解决方案。

from inspect import currentframe, getframeinfo
from datetime import datetime

def gTime():
    position = "%s [%s] - " % (str(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0')),getframeinfo(currentframe()).lineno)
    return position 

print gTime()
4

2 回答 2

0

如果你不能使用logging,我建议尽可能多地使用它的内部结构,或者至少向它们学习;见http://hg.python.org/cpython/file/tip/Lib/logging/__init__.py

特别是,logging.currentframe可用于获取封闭框架:

from inspect import getframeinfo
from logging import currentframe
from datetime import datetime

def callingFrame():
    return getframeinfo(currentframe())

def gTime():
    position = "%s [%s] - " % (str(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0')), callingFrame().lineno)
    return position 

print gTime()
于 2012-06-29T12:10:32.737 回答
0

“标准的‘记录器’模块在我的多线程应用程序中无法可靠地工作,所以我求助于手动解决方案。”

文件不同意

日志模块旨在实现线程安全,无需其客户端完成任何特殊工作。它通过使用线程锁来实现这一点;有一个锁可以序列化对模块共享数据的访问,每个处理程序还创建一个锁来序列化对其底层 I/O 的访问。

为什么它不能可靠地工作?

于 2012-06-29T12:35:50.363 回答