Python错误:AttributeError: module 'json' has no attribute 'loads'解决办法

今天在学习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语句主要是做了二件事:

  1. 查找相应的module
  2. 加载module到local namespace

在import的第一个阶段,主要是完成了查找要引入模块的功能。查找时首先检查 sys.modules (保存了之前import的类库的缓存),如果module没有被找到,则按照下面的搜索路径查找模块:

  1. .py 所在文件的目录
  2. PYTHONPATH 中的目录
  3. python安装目录,UNIX下,默认路径一般为/usr/local/lib/python/
  4. 3.x 中.pth 文件内容

也就是说,当我们import json的时候,它会先搜索json.py所在目录有没有对应的模块,由于我们命名的json.py与json模块文件重名,所以会误以为我们自己创建的json.py即为json模块文件,所以会出现这样的错误。

所以建议各位以后在命名的时候不要起一个与python预留字,模块名等相同的文件名,以免出现不必要的错误。

参考资料:https://github.com/xuelangZF/CS_Offer/blob/master/Python/Package.md

关注我公众号【小众技术】,此公众号专注分享Python、爬虫学习资料和干货,关注后回复【PYTHON】,无套路免费送你一个学习大礼包,包括爬虫视频和电子书~

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值