背景
公司近期加强了代码规范性的审查,一些敏感信息不能直接暴露在代码中,因此,需要将这部分信息存入配置中心,然后实现一个类用作配置中心的接口,最后通过这个接口来获取需要的信息。
问题产生
我将用作接口的这个类写在了项目目录的某个已有文件utils.py中,并且实例化了一个对象ap_clinet,其它需要获取配置中心信息的文件均通过调用这个对象来实现。
现在,有另一文件run_service.py需要实例化这个类,于是,其文件头中有这么一行:
from xxx.utils import ap_client (xxx代表的是父路径)
于是就会进入到utils.py中,utils.py中有这么一行:
from .api import xxx
接着便进入到api.py中,但是在api.py文件头中有这么一行:
from .utils import ap_client
于是,就来了这么一出戏:
ImportError: cannot import name 'ap_client'
解析
因为utils.py调用了api.py的东西,而api.py又需要调用utils.py的ap_client,而这时候utils.py里的ap_client还没有生成,于是就报错了。
解决措施
很简单,将ap_client单独写在另一个文件就好,这个文件不依赖任何其它文件的模块。
网友评论