先说结果:循环引用导致出错,找到出现循环引用的包,处理即可。
以下是排查步骤
项目结构
module目录下所有的import语句都写在__init__.py中
在BasePage.py中要使用GlobalMap中的方法,但是实例化GlobalMap时出错,提示NameError: name 'GlobalMap' is not defined
1、查看__init__.py中是否正确引入了GlobalMap
是的,否则编译就出错了。。
2、注释掉__init__.py中对GlobalMap的引入
此时,BasePage.py中实例化GlobalMap的语句被标红,右键,选择import,GlobalMap的引入语句被自动加到BasePage.py文件中。
再次执行,通过。
于是可知,GlobalMap类包的路径以及功能都没有问题。问题出在__init__.py中的import。
3、import出错的可能原因:循环引用
在A中import了B,可是B又import A,就像文件死锁一样,执行时永远无法结束依赖包的加载。
按照设计结构,BasePage.py中所需要的所有类包,都在__init__.py中导入,也就是说,BasePage.py依赖__init__.py,那么,如果__init__.py中又不小心import了BasePage.py的话,就会导致循环引用。
基于这个思路在__init__.py中搜索了一下BasePage,果然有。
解决
1、删掉__init__.py中关于BasePage的import
2、重新打开__init__.py中关于GlobalMap的import
3、删除BasePage中关于GlobalMap的import
解决。