模块“请求”没有属性“获取”或“发布”[已修复]

目录

AttributeError module ‘requests’ has no attribute ‘get’

  1. AttributeError 模块 ‘requests’ 没有属性 ‘get’
  2. AttributeError 模块 ‘requests’ 没有属性 ‘post’

AttributeError 模块 ‘requests’ 没有属性 ‘get’

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

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

attributeerror 模块请求没有属性 get

下面是一个示例,说明错误是如何在名为requests.py.

请求.py
import requests def make_request(): # ⛔️ AttributeError: module 'requests' has no attribute 'get' res = requests.get('https://reqres.in/api/users') parsed = res.json() print(parsed) make_request()

错误的最可能原因是有一个名为的本地文件requests.py
隐藏了官方
请求模块

确保你没有命名你的文件requests.py

确保将本地文件重命名为不同于requests.py解决错误的名称。

主程序
import requests def make_request(): res = requests.get('https://reqres.in/api/users') parsed = res.json() print(parsed) # ✅ Works make_request()

您可以将文件重命名为main.py或不与其他模块冲突的任何其他名称。

另一件需要注意的事情是导入语句不正确。如果这样做
import requests,则访问get方法为requests.get(...)

Python 解释器
首先

在内置模块中
查找导入的模块,然后在当前目录中查找,然后在 PYTHON PATH 中查找,然后在依赖于安装的默认目录中查找。

因此,当我们创建一个与第三方模块同名的本地文件时,我们实际上用我们的本地文件隐藏了官方模块。

检查请求模块所在的位置

您可以访问__file__导入模块的属性以查看它是否被本地文件隐藏。

主程序
import requests print(requests.__file__) # ⛔️ result if shadowed by local file # /home/borislav/Desktop/bobbyhadz_python/requests.py # ✅ result if pulling in correct module # /home/borislav/Desktop/bobbyhadz_python/venv/lib/python3.10/site-packages/requests/__init__.py

第一个结果显示了如果您有一个名为requests.py.

本地文件隐藏了原始requests模块并导致了问题。

requests第二个结果显示了如果拉出正确的模块,输出应该是什么样子

打印请求模块的属性

开始调试的一个好方法是print(dir(your_module))查看导入的模块具有哪些属性。

requests这是当我requests.py在同一目录中有一个文件时打印模块属性的样子。

请求.py
import requests # ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(requests))

如果将模块对象传递给
dir()函数,它会返回模块属性名称的列表。

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

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

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

请求.py
import requests print(dir(requests)) def make_request(): # ⛔️ AttributeError: partially initialized module 'requests' has no attribute 'get' (most likely due to a circular import) res = requests.get('https://reqres.in/api/users') parsed = res.json() print(parsed) make_request()

重命名文件可以解决错误。

AttributeError 模块 ‘requests’ 没有属性 ‘post’

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

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

attributeerror 模块请求没有属性 post

下面是一个示例,说明错误是如何在名为requests.py.

请求.py
import requests def make_request(): # ⛔️ AttributeError: module 'requests' has no attribute 'post' res = requests.post( 'https://reqres.in/api/users', data={'name': 'Bobby Hadz', 'job': 'programmer'} ) print(res.json()) make_request()

最可能的错误原因是有一个名为的本地文件requests.py
隐藏了官方
requests模块。

确保你没有名为的本地文件requests.py

确保将本地文件重命名为不同于requests.py解决错误的名称。

主程序
import requests def make_request(): res = requests.post( 'https://reqres.in/api/users', data={'name': 'Bobby hadz', 'job': 'programmer'} ) print(res.json()) # ✅ Works make_request()

另一件需要注意的事情是导入语句不正确。如果这样做
import requests,则访问post方法为requests.post(...)

Python 解释器
首先

在内置模块中
查找导入的模块,然后在当前目录中查找,然后在 PYTHON PATH 中查找,然后在依赖于安装的默认目录中查找。

因此,当我们创建一个与第三方模块同名的本地文件时,我们实际上用我们的本地文件隐藏了官方模块。

您可以访问__file__导入模块的属性以查看它是否被本地文件隐藏。

主程序
import requests print(requests.__file__) # ⛔️ result if shadowed by local file # /home/borislav/Desktop/bobbyhadz_python/requests.py # ✅ result if pulling in correct module # /home/borislav/Desktop/bobbyhadz_python/venv/lib/python3.10/site-packages/requests/__init__.py

开始调试的一个好方法是print(dir(your_module))查看导入的模块具有哪些属性。

打印请求模块的属性

requests这是当我requests.py在同一目录中有一个文件时打印模块属性的样子。

请求.py
import requests # ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(requests))

如果将模块对象传递给
dir()函数,它会返回模块属性名称的列表。

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

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

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

请求.py
import requests def make_request(): # ⛔️ AttributeError: partially initialized module 'requests' has no attribute 'post' (most likely due to a circular import) res = requests.post( 'https://reqres.in/api/users', data={'name': 'Bobby Hadz', 'job': 'programmer'} ) print(res.json()) make_request()

重命名文件可以解决错误。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: