AttributeError 模块 ‘base64’ 没有属性 ‘b64encode’
AttributeError module ‘base64’ has no attribute ‘b64encode’
Python“AttributeError module ‘base64’ has no attribute ‘b64encode’”发生在我们有一个命名的本地文件base64.py
并尝试从
base64
模块导入时。
要解决该错误,请确保重命名所有名为base64.py
.
下面是一个示例,说明错误是如何在名为base64.py
.
base64.py
import base64 encoded = base64.b64encode(b'some data here') # ⛔️ AttributeError: module 'base64' has no attribute 'b64encode' print(encoded)
错误的最可能原因是有一个名为的本地文件base64.py
隐藏了base64
标准库中的模块。
确保你没有将你的文件命名为 base64.py
确保将本地文件重命名为不同于base64.py
解决错误的名称。
主程序
import base64 encoded = base64.b64encode(b'some data here') print(encoded) # 👉️ b'c29tZSBkYXRhIGhlcmU='
您可以将文件重命名为my_base64.py
或main.py
。
任何不与模块冲突的名称都可以。
检查 base64 模块来自哪里
您可以访问__file__
导入模块的属性以查看它是否被本地文件隐藏。
主程序
import base64 print(base64.__file__) # ⛔️ result if shadowed by local file # /home/borislav/Desktop/bobbyhadz_python/base64.py # ✅ result if pulling in correct module # /usr/lib/python3.10/base64.py
开始调试的一个好方法是print(dir(your_module))
查看导入的模块具有哪些属性。
检查 base64 模块有哪些属性
base64
这是当我base64.py
在同一目录中有一个文件时打印模块属性的样子。
主程序
import base64 # ⛔️ ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(base64))
如果将模块对象传递给
dir()函数,它会返回模块属性名称的列表。
如果您尝试访问不在此列表中的任何属性,您将得到“AttributeError:模块没有属性”。
我们可以看到导入的base64
模块没有b64encode
属性,这表明我们正在使用base64
本地base64.py
文件隐藏官方模块。
如果您尝试base64
在一个名为 的文件中导入模块base64.py
,您会收到一些不同的错误消息,但意思是一样的。
base64.py
import base64 # ⛔️ AttributeError: partially initialized module 'base64' has no attribute 'b64encode' (most likely due to a circular import) encoded = base64.b64encode(b'some data here')
重命名文件可以解决错误。
您可以使用该sys
模块打印所有内置模块名称。
主程序
import sys # 👇️ print all built-in module names print(sys.builtin_module_names)