首页 > 解决方案 > 使用请求时Python在API周围抛出错误

问题描述

我是 API 新手,并且正在遵循每个网站的确切说明,解释应该如何使用 requests 模块在 Python 中获得 API 的帮助。但是,无论我定义什么 API 链接(当然,我为了测试它们是否工作而使用了许多免费的 API 示例),我都会收到这个错误:ImportError: cannot import name 'b64encode' from 'base64' 我不知道问题是什么,或者我没有做对。这是我的片段,只是作为一个示例:

import requests

words = 30
paragraphs = 1
formats = 'text'

response = requests.get(f"https://v2.jokeapi.dev/")
print(response.text)

我得到的完整错误是这样的:

Traceback (most recent call last):
  File "/home/liana/Desktop/testing.py", line 1, in <module>
    import requests
  File "/usr/lib/python3/dist-packages/requests/__init__.py", line 43, in <module>
    import urllib3
  File "/usr/lib/python3/dist-packages/urllib3/__init__.py", line 11, in <module>
    from . import exceptions
  File "/usr/lib/python3/dist-packages/urllib3/exceptions.py", line 3, in <module>
    from six.moves.http_client import IncompleteRead as httplib_IncompleteRead
  File "/usr/lib/python3/dist-packages/six.py", line 203, in load_module
    mod = mod._resolve()
  File "/usr/lib/python3/dist-packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/usr/lib/python3/dist-packages/six.py", line 82, in _import_module
    __import__(name)
  File "/usr/lib/python3.9/http/client.py", line 71, in <module>
    import email.parser
  File "/usr/lib/python3.9/email/parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "/usr/lib/python3.9/email/feedparser.py", line 27, in <module>
    from email._policybase import compat32
  File "/usr/lib/python3.9/email/_policybase.py", line 7, in <module>
    from email import header
  File "/usr/lib/python3.9/email/header.py", line 17, in <module>
    import email.base64mime
  File "/usr/lib/python3.9/email/base64mime.py", line 37, in <module>
    from base64 import b64encode
ImportError: cannot import name 'b64encode' from 'base64' (/home/liana/Desktop/base64.py)
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 72, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 21, in <module>
    from urllib.request import urlopen
File "/usr/lib/python3.9/urllib/request.py", line 88, in <module>
    import http.client
  File "/usr/lib/python3.9/http/client.py", line 71, in <module>
    import email.parser
  File "/usr/lib/python3.9/email/parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "/usr/lib/python3.9/email/feedparser.py", line 27, in <module>
    from email._policybase import compat32
  File "/usr/lib/python3.9/email/_policybase.py", line 7, in <module>
    from email import header
  File "/usr/lib/python3.9/email/header.py", line 17, in <module>
    import email.base64mime
  File "/usr/lib/python3.9/email/base64mime.py", line 37, in <module>
    from base64 import b64encode
ImportError: cannot import name 'b64encode' from 'base64' (/home/liana/Desktop/base64.py)
Original exception was:
Traceback (most recent call last):
  File "/home/liana/Desktop/testing.py", line 1, in <module>
    import requests
  File "/usr/lib/python3/dist-packages/requests/__init__.py", line 43, in <module>
    import urllib3
  File "/usr/lib/python3/dist-packages/urllib3/__init__.py", line 11, in <module>
    from . import exceptions
  File "/usr/lib/python3/dist-packages/urllib3/exceptions.py", line 3, in <module>
    from six.moves.http_client import IncompleteRead as httplib_IncompleteRead
  File "/usr/lib/python3/dist-packages/six.py", line 203, in load_module
    mod = mod._resolve()
  File "/usr/lib/python3/dist-packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/usr/lib/python3/dist-packages/six.py", line 82, in _import_module
    __import__(name)
  File "/usr/lib/python3.9/http/client.py", line 71, in <module>
    import email.parser
  File "/usr/lib/python3.9/email/parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "/usr/lib/python3.9/email/feedparser.py", line 27, in <module>
    from email._policybase import compat32
  File "/usr/lib/python3.9/email/_policybase.py", line 7, in <module>
    from email import header
  File "/usr/lib/python3.9/email/header.py", line 17, in <module>
    import email.base64mime
  File "/usr/lib/python3.9/email/base64mime.py", line 37, in <module>
    from base64 import b64encode
ImportError: cannot import name 'b64encode' from 'base64' (/home/liana/Desktop/base64.py)

任何帮助表示赞赏。

标签: pythonpython-3.xapipython-requestsimporterror

解决方案


如果您仔细查看回溯,您会发现它从您的脚本 开始,"/home/liana/Desktop/testing.py"经过一系列导入,最后在尝试从 导入时b64encode崩溃base64.py

该文件/home/liana/Desktop/base64.py是您创建或下载的文件。由于它在当前目录中,因此它取代了正在寻找的真实base64.py目录"/usr/lib/python3.9/email/base64mime.py"。您当前目录中的文件显然没有定义 name b64encode,这是错误的直接原因。

要解决此问题,请确保当前目录中的文件名称与其他顶级模块的名称不冲突。所以要么重命名它 delete /home/liana/Desktop/base64.py


推荐阅读