AttributeError:‘module’object has no attribute ‘xxxxx’
ImportError: cannot import name xxxxx
对于很多的刚入自动化测试的小白来说,这两个问题真是头疼,我的包好好的,模块也好好的为什么还找不到这个模块呢!!!!
首先你一定要搞明白python里面的模块本质到底是什么,他就是py文件!!!以json模块为例,你使用的解码,加码 ,decoder和encoder
python脚本文件有两种调用方式,一种是以模块的方式被导入使用
from selenium import webdriver
另一种就是直接执行
if '__name__' == '__main__'
未安装对应模块
这种情况一般是我们未安装对应的模块,比如python我们没有安装Selenium,谈何从Selenium导入模块呢
属性名写错
本来某个属性叫TestCase,你敲代码敲成testCase,找不到也正常
存在重名文件
下面直接上两个图(来自于群友)来告诉你
刚刚说过的模块就是py文件,这里的文件叫‘mysql.py’显然在python的Lib文件夹下已经存在了一个mysql.py 当然就凌乱了
同样的在某个文件夹下存在一个用户新建的unittest.py的文件,也凌乱了
这里敲重点,文件命名要规范,然后也要理解基础的一些知识,了解python模块导入
转自:http://www.jb51.net/article/120862.htm?utm_medium=referral
Python 解释器查找包的顺序是什么
解释器查找包,首先搜索 built-in module,其次搜索 sys.path ,这样的查找顺序将会导致同名包或模块被遮蔽。
#ls
├── os.py
├── test2.py
├── redis.py
#test2.py
import os
from redis import Redis
#execute test2.py
Traceback (most recent call last):
File "/Users/x/workspace/blog-code/p2016_05_28_python_path_find/test2.py", line 1, in <module>
from redis import Redis
ImportError: cannot import name Redis
ls
├── os.py
├── test2.py
├── redis.py
test2.py
import os
from redis import Redis
execute test2.py
Traceback (most recent call last):
File “/Users/x/workspace/blog-code/p2016_05_28_python_path_find/test2.py”, line 1, in
from redis import Redis
ImportError: cannot import name Redis
由于 os 是 built-in module,即使在同目录下有同名模块,解释器依然可以找到正确的 os 模块,可以证实 built-in module 不会被遮蔽,而 redis 属于第三方模块,默认安装位置是 Python 环境变量中的 site-packages,解释器启动之后会将此目录中的内容加入 sys.path,由于当前目录会在 sys.path 的首位,当前目录的 redis 优先被找到,site-packages 中的 redis 模块被遮蔽了。