今天在学习python中json模块的时候遇到了点让我怀疑人生的问题。像往常一样,我在电脑d盘根目录创建了一个:json.py的python文件,打算在这里练习一下json中的两个函数:loads()和dumps()。
但是当我运行了如下代码的时候,它竟然提示我:AttributeError: module 'json' has no attribute 'loads',翻译成汉语的意思是:属性错误:json模块中没有loads属性(函数),当时看到这个错误时我的第一反应就是:what is the fuck!老子就是要练习这个loads函数的,你告诉我json模块没有这个函数?
import json
#json文本字符串
j ='''aa:''[{
"password" : "123321",
"method" : "AES-256-CFB",
"protocol" : "auth_sha1_v4",
}]''
'''
js = json.loads(j)
print(js)
#json文本字符串
j ='''aa:''[{
"password" : "123321",
"method" : "AES-256-CFB",
"protocol" : "auth_sha1_v4",
}]''
'''
js = json.loads(j)
print(js)
D:\>python json.py
Traceback (most recent call last):
File "json.py", line 1, in <module>
import json
File "D:\json.py", line 21, in <module>
js = json.loads(j)
AttributeError: module 'json' has no attribute 'loads'
Goole答案之后,我发现了解决办法,只要将我刚刚创建的json.py的文件改一下名字就可以了,比如说改成json1.py。只要别用json命名就可以了。那为什么会出现这样的错误呢?
首先我们要了解python中import引入模块的原理机制。当我们执行一行 from package import module as mymodule 命令时,Python解释器会查找package 这个包的module模块,并将该模块作为 mymodule 引入到当前的工作空间。所以import语句主要是做了二件事:
查找相应的module
加载module到local namespace
在import的第一个阶段,主要是完成了查找要引入模块的功能。查找时首先检查 sys.modules (保存了之前import的类库的缓存),如果module没有被找到,则按照下面的搜索路径查找模块:
.py 所在文件的目录
PYTHONPATH 中的目录
python安装目录,UNIX下,默认路径一般为/usr/local/lib/python/
3.x 中.pth 文件内容
也就是说,当我们import json的时候,它会先搜索json.py所在目录有没有对应的模块,由于我们命名的json.py与json模块文件重名,所以会误以为我们自己创建的json.py即为json模块文件,所以会出现这样的错误。
所以建议各位以后在命名的时候不要起一个与python预留字,模块名等相同的文件名,以免出现不必要的错误。
---------------------
作者:向东的笔记本
来源:优快云
原文:https://blog.youkuaiyun.com/gaifuxi9518/article/details/81038019
版权声明:本文为博主原创文章,转载请附上博文链接!