【python基礎】Python錯誤:AttributeError: module 'json' has no attribute 'loads'解決辦法


 

錯誤

Traceback (most recent call last):
  File "json2mask.py", line 18, in <module>
    main()
  File "json2mask.py", line 13, in main
    data = json.load(open(jsonpath))
AttributeError: module 'json' has no attribute 'load'

單步運行是可以import json這個模塊的,而且之前運行時沒有問題的;

>>> import json
>>> aa = json.load(open('./xxx_huanshi_20210512.json'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'json' has no attribute 'load'
>>> exit()

原因

目錄中有一個json命名的文件;最根本的原因是python搜索導入模塊的順序;

$ ls
20210512.xxx/  Readme.md  xxx_huanshi_20210512.json  json.py

首先我們要了解python中import引入模塊的原理機制。當我們執行一行 from package import module as mymodule 命令時,Python解釋器會查找package 這個包的module模塊,並將該模塊作為 mymodule 引入到當前的工作空間。所以import語句主要是做了二件事:

a) 查找相應的module
b) 加載module到local namespace
在import的第一個階段,主要是完成了查找要引入模塊的功能。查找時首先檢查 sys.modules (保存了之前import的類庫的緩存),如果module沒有被找到,則按照下面的搜索路徑查找模塊:

a) .py 所在文件的目錄
b) PYTHONPATH 中的目錄
c) python安裝目錄,UNIX下,默認路徑一般為/usr/local/lib/python/
d) 3.x 中.pth 文件內容
也就是說,當我們import json的時候,它會先搜索json.py所在目錄有沒有對應的模塊,由於我們命名的json.py與json模塊文件重名,所以會誤以為我們自己創建的json.py即為json模塊文件,所以會出現這樣的錯誤。

解決方法

更改json.py文件的名稱;

參考

1. Python錯誤:AttributeError: module 'json' has no attribute 'loads'解決辦法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM