0

对 Leenert Regebro 的回答:显然我的直觉是正确的,这是不可能的。而且很明显,因为两个小时内只有一个答案。也感谢所有的评论。

我的 Google-foo 让我失望了。

我正在编写一个自定义异常库作为模块,用于单个发布者下的多个项目。我可能在其他项目中没有发言权,或者我可能有发言权。所以它可以被我和其他人使用。“和其他人”是这里的问题。在我的异常模块中,将有特定的功能用于使用该logging模块将回溯等输出到日志文件。这对我来说很好,因为我使用该logging模块。

但是如果其他人(不使用logging)使用异常库,我需要跳过日志记录部分。try...except 解决了这个问题,但是如果他们正在使用logging呢?在这种情况下,我需要能够确定他们的日志记录方案(控制台/文件/流、文件名等)。这样我就可以创建一个子记录器,它将写入他们的文件(或控制台或你有什么) ):

<snip>
their_logger = THE_FUNCTION_I_CANNOT_FIGURE_OUT_HOW_TO_WRITE()
temp_var = their_logger.name + ".ExceptionLogger"
myLogger = logging.getLogger(temp_var)
</snip>

显然,我可以创建一个单独的类或函数来实例化我的模块并让它接收 type 的参数logging.logger,但如果可能的话,我更愿意白痴证明这一点。

我什至无法检查 aglobalglobals()dict 是否有我知道的值,因为其他程序员可能不会使用它。

有没有办法做到这一点?(假设我的库已被导入,并且可能不是由顶级应用程序导入......)我个人从未尝试从命名空间中的上游获取数据以在没有显式传递的情况下在较低命名空间中可用,我怀疑它甚至可能,但是那里有很多程序员,有人做到了吗?

4

1 回答 1

3

默认情况下包含可选配置是个坏主意。不要默认添加日志记录细节,然后通过 try/except 进行某种疯狂的猜测以排除它,而是将这部分代码放入一个函数中,并从你的代码中显式调用它。

你不能傻傻的事情。事实上,你拥有的魔法和隐藏的逻辑越多,它就越不防白痴,很快它就会变得防智力,变得很难理解魔法。

因此,请按照您的想法制作一个函数并传入记录器。

于 2013-01-06T17:48:30.183 回答