您在这里有一些边际相关的问题。
我将从最简单的开始:(3)。使用,logging
您可以将所有调用聚集到一个日志文件或其他输出目标中:它们将按照在处理过程中发生的顺序进行。
接下来:(2)。locals()
提供当前范围的指示。因此,在没有其他参数的方法中,您将具有self
范围,该范围包含对当前实例的引用。困扰您的技巧是使用字典作为%
操作员的RHS的字符串格式。"%(foo)s" % bar
将被替换为bar["foo"]
is的任何值。
最后,您可以使用一些自省技巧,类似于pdb
可以记录更多信息的自省技巧:
def autolog(message):
"Automatically log the current function details."
import inspect, logging
# Get the prevIoUs frame in the stack, otherwise it would
# be this function!!!
func = inspect.currentframe().f_back.f_code
# Dump the message + the name of this function to the log.
logging.debug("%s: %s in %s:%i" % (
message,
func.co_name,
func.co_filename,
func.co_firstlineno
))
这将记录传入的消息,以及(原始)函数名称,出现定义的文件名以及该文件中的行。看一下检查- 检查活动对象以了解更多详细信息。
正如我在前面的评论中所提到的,您还可以pdb
随时通过插入行import pdb; pdb.set_trace()
并重新运行程序来进入交互式调试提示符。这使您可以逐步检查代码,并根据需要检查数据。