该错误的根本原因是将模块误当作函数或类调用,如写 json()、os() 等;模块不可调用,只能通过 module.func() 或导入具体函数后调用。

为什么会出现 TypeError: 'module' object is not callable?
这个错误只有一种根本原因:你把一个模块当成了函数或类来调用,比如写了 json()、os() 或 requests()。Python 解释器看到括号,就认为你在调用可调用对象,但实际它只是一个模块(module 类型),不能直接调用。
最常见的触发场景和修复方式
绝大多数情况发生在导入方式和使用方式不匹配时:
- 错误写法:
import json后写了json({"key": "value"})——json是模块,不是函数;正确应为json.dumps(...) - 错误写法:
from requests import requests(误以为能这样导入)—— 实际上requests模块没有叫requests的顶层对象;正确是import requests后用requests.get(...) - 错误写法:
import os然后os("ls")——os是模块,执行命令要用os.system(...)或subprocess.run(...)
如何快速定位出错的那行代码?
看报错 traceback 最末尾的那行,比如:
TypeError: 'module' object is not callable
File "main.py", line 12, in <module>
data = json(data_dict)</module>
说明第 12 行写了 json(...)。这时立刻检查两件事:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 这一行上面有没有
import json(而不是from json import dumps) - 是否本意是调用
dumps或loads,却漏写了方法名 - 有没有命名冲突:比如自己定义了
json = ...覆盖了导入的模块
import 写法和调用方式必须严格对应
不同导入方式决定了你怎么用,混淆就会报这个错:
-
import json→ 必须用json.dumps(...)、json.loads(...) -
from json import dumps, loads→ 可以直接用dumps(...),但不能再写json(...)(因为json根本没导入) -
from json import *→ 不推荐,但此时dumps和loads进入当前命名空间,json仍然不可用
模块本身永远不可调用,能调用的只有它里面的函数、类或实例 —— 记住这点,基本就不会踩坑。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










