遇到了同样的问题json文件名同样的!以后记住不能起名和模块一样的名字

今天在学习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预留字,模块名等相同的文件名,以免出现不必要的错误。
--------------------- 
作者:向东的笔记本 
来源:CSDN 
原文:https://blog.csdn.net/gaifuxi9518/article/details/81038019 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值