gpt4 book ai didi

python - 执行(错误)初始化的模块的解决方法

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

我们有一个中央模块,该模块在加载时调用 init() 函数:

import x
import y
import z

def init():
....

init()

if __name__ == '__main__':
...

这会被引入到我们的每个应用程序模块中,并带有如下语句:

if __name__ == '__main__':
import central_module as b
b.do_this()
b.do_that()

init() 做了很多坏事,特别是建立与数据库的连接。因此,它会破坏任何单元测试,并且我编写的模块期望您导入模块并显式调用任何初始化的通常行为。

我通过在顶部添加一个 INITIALIZE 变量来实现变通方法:

#INITIALIZE = True
INITIALIZE = False # for DEV/test

if INITIALIZE:
init()

但需要我编辑该文件以运行我的测试或进行开发,然后在我准备好提交和推送时恢复更改。

出于政治原因,我没有得到任何关于修复它的牵引力,比如:

import central_module as b
...
b.init()
b.do_this()
b.do_that()

有没有什么方法可以在模块加载时更透明地禁用该调用?问题是在导入模块时,它已经尝试连接到数据库(但失败了)。

现在我最好的想法是:我可以将 INITIALIZE 变量移动到之前的导入中,并在我的测试中导入它,将初始化设置为 FALSE,然后导入 central_module。

我会继续在政治方面 (arg) 工作,但想知道是否有更好的解决方法我可以在不中断所有现有脚本的情况下禁用该 init 调用。

最佳答案

INITIALIZE hack 的一个简单更改是让它来自环境变量。然后,您永远不必修改代码来运行这些测试,并且在您真正修复错误的 init 之前减少黑客攻击。

 INITIALIZE = os.environ.get('DO_TERRIBLE_INITIALIZE', False)
if INITIALIZE:
....

值可以是任何东西,只要它的集合。

 export DO_TERRIBLE_INITIALIZE=ohgodwhy

关于python - 执行(错误)初始化的模块的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16929717/

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