pytest导入类包出错:NameError: name ‘XXX‘ is not defined

先说结果:循环引用导致出错,找到出现循环引用的包,处理即可。

以下是排查步骤

项目结构

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

解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值