You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3中requests脚本运行异常但Python2及交互模式正常

问题解决:重命名你的Python脚本文件

你碰到的这个问题其实是个很常见的“文件名冲突”踩坑案例——你的脚本叫http.py,和Python标准库中的http模块重名了,这直接引发了循环导入的错误。

为什么会出现这个错误?

仔细看错误日志的最后几行就能找到线索:

File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 82, in _import_module
    __import__(name)
File "/Users/colechalland/Code/Python-3/Modern_Python3_Bootcamp/23_Making-HTTP-Requests/http.py", line 5, in <module>
    response = requests.get(url)
AttributeError: module 'requests' has no attribute 'get'

当requests依赖的urllib3试图导入标准库的http.client模块时,Python会优先加载当前目录下的同名文件(也就是你的http.py)。而你的脚本里又在尝试导入requests并调用它的get方法,这时候requests模块还没完成全部初始化,自然就会抛出“找不到get属性”的错误。

至于为什么交互模式和Python2能正常运行:

  • 交互模式下没有同名的http.py干扰,Python会正确加载系统标准库的http模块;
  • Python2的模块搜索逻辑和标准库结构和Python3有差异,刚好没触发这个冲突。

怎么解决?

  1. 重命名你的脚本:把http.py改成别的名字,比如my_http_request.py,只要不跟Python标准库的模块名重名就行;
  2. 清理缓存文件:如果当前目录下有http.pyc文件或者__pycache__文件夹,删掉它们(这些是Python的编译缓存,可能残留旧的引用);
  3. 重新运行脚本:这时候应该就能正常执行了。

快速验证问题的方法

你可以在Python3交互模式里输下面的代码,看看http模块的来源:

import http
print(http.__file__)

如果输出的是你自己的http.py路径,那实锤是文件名冲突;正常情况下应该输出Python标准库中http模块的路径。

内容的提问来源于stack exchange,提问作者Cole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:32:33