目录
AttributeError module ‘json’ has no attribute ‘loads’
AttributeError 模块 ‘json’ 没有属性 ‘loads’
Python“AttributeError module ‘json’ has no attribute ‘loads’”发生在我们有一个命名的本地文件json.py
并尝试从json
模块导入时。
要解决该错误,请确保重命名所有名为json.py
.
下面是一个示例,说明错误是如何在名为json.py
.
import json # ⛔️ AttributeError: module 'json' has no attribute 'loads' parsed = json.loads('{"name": "Alice", "age": 30}') print(parsed) print(type(parsed))
错误的最可能原因是有一个名为的本地文件json.py
隐藏了json
标准库中的模块。
确保你没有名为的本地文件json.py
确保将本地文件重命名为不同于json.py
解决错误的名称。
import json parsed = json.loads('{"name": "Alice", "age": 30}') # 👇️ {'name': 'Alice', 'age': 30} print(parsed) # 👇️ <class 'dict'> print(type(parsed))
您可以将文件重命名为my_json.py
或main.py
。
任何不与模块冲突的名称都可以。
检查json
模块所在的位置
您可以访问__file__
导入模块的属性以查看它是否被本地文件隐藏。
import json print(json.__file__) # ⛔️ result if shadowed by local file # /home/borislav/Desktop/bobbyhadz_python/json.py # ✅ result if pulling in correct module # /usr/lib/python3.10/json.py
第一个结果显示了如果您有一个名为json.py
.
本地文件隐藏了原始json
模块并导致了问题。
json
第二个结果显示了如果拉出正确的模块,输出应该是什么样子。
开始调试的一个好方法是print(dir(your_module))
查看导入的模块具有哪些属性。
json
这是当我json.py
在同一目录中有一个文件时打印模块属性的样子。
import json # ⛔️ ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(json))
如果将模块对象传递给
dir()函数,它会返回模块属性名称的列表。
我们可以看到导入的json
模块没有loads
属性,这表明我们正在使用json
本地json.py
文件隐藏官方模块。
如果您尝试json
在一个名为 的文件中导入模块json.py
,您会收到一些不同的错误消息,但意思是一样的。
import json # ⛔️ AttributeError: partially initialized module 'json' has no attribute 'loads' (most likely due to a circular import) parsed = json.loads('{"name": "Alice", "age": 30}')
重命名文件可以解决错误。
sys
如果您想知道您的本地模块是否与内置模块冲突,您可以使用该模块打印所有内置模块名称。
import sys # 👇️ print all built-in module names print(sys.builtin_module_names)
AttributeError 模块 ‘json’ 没有属性 ‘dumps’
Python“AttributeError module ‘json’ has no attribute ‘dumps’”发生在我们有一个命名的本地文件json.py
并尝试从json
模块导入时。
要解决该错误,请确保重命名所有名为json.py
.
下面是一个示例,说明错误是如何在名为json.py
.
import json # ⛔️ AttributeError: module 'json' has no attribute 'dumps' json_str = json.dumps({'name': 'Alice', 'age': 30}) print(json_str) print(type(json_str))
The most likely cause of the error is having a local file named json.py
which
shadows the json
module from the standard library.
# Make sure you haven’t named your module json.py
Make sure to rename your local file to something other than json.py
to solve
the error.
import json json_str = json.dumps({'name': 'Alice', 'age': 30}) # 👇️ {"name": "Alice", "age": 30} print(json_str) # 👇️ <class 'str'> print(type(json_str))
You can access the __file__
property on the imported module to see whether it
is shadowed by a local file.
import json print(json.__file__) # ⛔️ result if shadowed by local file # /home/borislav/Desktop/bobbyhadz_python/json.py # ✅ result if pulling in correct module # /usr/lib/python3.10/json.py
A good way to start debugging is to print(dir(your_module))
and see what
attributes the imported module has.
Here is what printing the attributes of the json
module looks like when I have
a file json.py
in the same directory.
import json # ⛔️ ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(json))
If you pass a module object to the
dir() function, it returns a list of
names of the module’s attributes.
We can see that the imported json
module doesn’t have a dumps
attribute,
which makes it evident that we are shadowing the official json
module with our
local json.py
file.
If you try to import the json
module in a file called json.py
, you would get
a little different error message that means the same thing.
import json # ⛔️ AttributeError: partially initialized module 'json' has no attribute 'dumps' (most likely due to a circular import) json_str = json.dumps({'name': 'Alice', 'age': 30})
Renaming your file solves the error.
You can use the sys
module to print all of the built-in module names.
import sys # 👇️ print all built-in module names print(sys.builtin_module_names)
# Additional Resources
You can learn more about the related topics by checking out the following
tutorials: