模块“json”没有属性“loads”或“dumps”[已解决]

目录

AttributeError module ‘json’ has no attribute ‘loads’

  1. AttributeError 模块 ‘json’ 没有属性 ‘loads’
  2. AttributeError 模块 ‘json’ 没有属性 ‘dumps’

AttributeError 模块 ‘json’ 没有属性 ‘loads’

Python“AttributeError module ‘json’ has no attribute ‘loads’”发生在我们有一个命名的本地文件json.py并尝试从json模块导入时。

要解决该错误,请确保重命名所有名为json.py.

attributeerror 模块 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.pymain.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()函数,它会返回模块属性名称的列表。

如果您尝试访问不在此列表中的任何属性,您将得到“AttributeError:模块没有属性”。

我们可以看到导入的json模块没有loads属性,这表明我们正在使用json本地json.py文件隐藏官方模块。

如果您尝试json在一个名为 的文件中导入模块json.py,您会收到一些不同的错误消息,但意思是一样的。

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.

attributeerror 模块 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.

main.py
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.

main.py
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.

main.py
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.

If you try to access any attribute that is not in this list, you would get the “AttributeError: module has no attribute”.

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.

json.py
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.

main.py
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: