如何修复Python3中的“AttributeError: 'module' object has no attribute 'client'”错误?

8 投票
1 回答
35553 浏览
提问于 2025-04-18 17:06

以下是我的代码。

import http
h1 = http.client.HTTPConnection('www.bing.com')

我觉得这没问题。但是Python给了我以下错误:

AttributeError: 'module' object has no attribute 'client'。

我想知道这是为什么,以及怎么解决。谢谢。

1 个回答

9

首先,导入一个包并不会自动导入它所有的子模块。

所以你可以试试这个:

import http.client

如果这样不行,那很可能是你在某个地方(大概率是在当前目录)有一个叫 http.py 的文件,或者一个叫 http 的文件夹。你可以很简单地检查一下:

import http
http.__file__

这样检查后,你应该能看到类似 /usr/lib/python3.3/http/__init__.py/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/http/__init__.py 这样的目录,或者其他看起来明显是系统文件的路径;如果你看到的是 /home/me/src/myproject/http.py,那就是你的问题所在。解决方法是把你的模块重命名,确保它和你想用的标准库模块没有同样的名字。


如果这也不是问题,那可能是你的 Python 安装有问题,或者你有两个 Python 安装互相干扰。最常见的原因是你安装第二个 Python 时修改了 PYTHONPATH 环境变量,但你输入 python 时,实际上运行的是第一个 Python。


* 不过有时候确实会自动导入。这要看具体的模块。有时你也无法判断某个东西是一个有非模块成员的包(像 http),还是一个有子模块的模块(像 os)。幸运的是,这并不重要;无论是否必要,使用 import os.pathimport http.client 都是安全的。

撰写回答