目录
AttributeError module ‘requests’ has no attribute ‘get’
AttributeError 模块 ‘requests’ 没有属性 ‘get’
Python“AttributeError module ‘requests’ has no attribute ‘get’”发生在我们有一个命名的本地文件requests.py
并尝试从模块导入
时requests
。
要解决该错误,请确保重命名所有名为requests.py
.
下面是一个示例,说明错误是如何在名为requests.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
在同一目录中有一个文件时打印模块属性的样子。
import requests # ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(requests))
如果将模块对象传递给
dir()函数,它会返回模块属性名称的列表。
我们可以看到导入的requests
模块没有get
属性,这表明我们正在使用requests
本地requests.py
文件隐藏官方模块。
如果您尝试requests
在一个名为 的文件中导入模块requests.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
.
下面是一个示例,说明错误是如何在名为requests.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
在同一目录中有一个文件时打印模块属性的样子。
import requests # ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(requests))
如果将模块对象传递给
dir()函数,它会返回模块属性名称的列表。
我们可以看到导入的requests
模块没有该post
属性,这表明我们正在使用requests
本地requests.py
文件隐藏官方模块。
如果您尝试requests
在一个名为 的文件中导入模块requests.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()
重命名文件可以解决错误。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: