gpt4 book ai didi

python - 通过导入一个简单的函数来停止日志记录?

转载 作者:行者123 更新时间:2023-11-28 19:25:25 26 4
gpt4 key购买 nike

现在我正在尝试更大的程序,我想使用日志记录模块而不是在我的代码中添加打印。但我一开始就倒下了。我有一个两页程序,添加了我能做的最简单的日志记录,但它没有用。所以,我运行了这个例子,它成功了。然后,我将我的代码逐行滴入示例中,直到找到阻止它的原因。一个几乎为空的模块的简单导入会停止正确的日志记录行为。

# import ntu.dummy
import logging
LOG_FILENAME = 'example_15.log'
print 'before basicconfig'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)
print 'before log write'
logging.debug('This message should go to the log file')
print 'after log write'

使用#import ntu.dummy,程序运行,打印出调试信息,并将预期的.log 文件和预期的内容存放到程序的文件夹中。在 IDLE 中或直接在操作系统中都是如此。

如果我删除 # 以允许 import ntu.dummy 执行,则程序运行,打印我的调试,但没有创建 .log 文件,既不在程序的文件夹中,也不在机器上的任何其他位置的 AFAICS 中。

C:\Python26\Lib\ntu\包含一个 __init__.py 和这个文件 dummy.py,它的内容是......

def bolleaux():
""" empty function """
return None

代替 import ntu.dummy 语句,我可以有各种其他导入,random,Tkinter,os.path,它们不会导致日志记录失败

求助,请问这是怎么回事?

最佳答案

呸!

ntu 包包含许多其他单一功能或单一类模块,真正是为了便于测试和更新。其中一些来自 friend ,所以我不熟悉其中的内容。由于包的宽度越来越笨重,他建议我在 __init__.py 中放 ...

from modname import ClassName

对于我在那里的每个模块,然后将 ClassName 带入 ntu 命名空间。这意味着当我想使用任何模块时,我只需使用

import ntu       # instead of import ntu.modname for each module !

当然,是的,他的一个模块在类定义之前在模块级别执行 logging.basicConfig。因此,即使我只导入我的模块,这样做也会运行 __init__,它会导入他的模块,这会导致后续使用日志记录。注释掉该链中的任何链接可使日志记录正常工作。

我不确定在包中使用 import 是否能节省如此巨大的成本,而且它让我对这样的讨厌的副作用敞开心扉。所以我要为我的所有模块重新从 packname.modname 导入。

但我想在某个时候使用那个狡猾的模块,所以必须让它更安全,或者让他让它更安全。

非常感谢

关于python - 通过导入一个简单的函数来停止日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14408419/

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