为什么会出现此错误?
Why is this error appearing?
AttributeError: 'builtin_function_or_method' object has no attribute 'encode'
我正在尝试制作一个文本到代码转换器作为作业的示例,这是一些基于我在研究中发现的代码,
import binascii
text = input('Message Input: ')
data = binascii.b2a_base64.encode(text)
text = binascii.a2b_base64.encode(data)
print (text), "<=>", repr(data)
data = binascii.b2a_uu(text)
text = binascii.a2b_uu(data)
print (text), "<=>", repr(data)
data = binascii.b2a_hqx(text)
text = binascii.a2b_hqx(data)
print (text), "<=>", repr(data)
谁能帮我让它工作?它应该接受输入然后将其转换为十六进制和其他并显示那些......
我正在使用 Python 3.6,但我也有点缺乏实践...
长话短说:
data = binascii.b2a_base64(text.encode())
text = binascii.a2b_base64(data).decode()
print (text, "<=>", repr(data))
您遇到了 Python3 中的一个常见问题 - str 对象与 bytes 对象。 bytes
对象包含字节序列。一个字节可以包含 0 到 255 之间的任意数字。通常这些数字通过 ASCII table 转换为字符,如英文字母。通常在 Python 中你应该使用字节来处理二进制数据。
另一方面,str
对象包含代码点序列。当您调用 print
时,一个代码点通常代表屏幕上打印的一个字符。在内部它是字节序列所以中文符号 的
在内部保存为 3 字节长的序列。
现在解决你的问题。该函数需要输入 bytes
对象,但您从函数 input
中得到了一个 str
对象。要将 str
转换为 bytes
,您必须在 str
对象上调用 str.encode()
方法。
data = binascii.b2a_base64(text.encode())
你原来的调用binascii.b2a_base64.encode(text)
表示调用对象binascii.b2a_base64
的方法encode
,参数为text
。
函数 binascii.b2a_base64
returns bytes
包含使用 base64 算法编码的原始输入。现在要从编码数据中取回原始 str
,您必须这样调用:
# Take base64 encoded data and return it decoded as bytes object
decoded_data = binascii.a2b_base64(data)
# Convert bytes object into str
text = decoded_data.decode()
可以写成一行
decoded_data = binascii.a2b_base64(data).decode()
警告:您对 print
的调用对 Python 3 无效(它仅在 python 控制台中有效)
AttributeError: 'builtin_function_or_method' object has no attribute 'encode'
我正在尝试制作一个文本到代码转换器作为作业的示例,这是一些基于我在研究中发现的代码,
import binascii
text = input('Message Input: ')
data = binascii.b2a_base64.encode(text)
text = binascii.a2b_base64.encode(data)
print (text), "<=>", repr(data)
data = binascii.b2a_uu(text)
text = binascii.a2b_uu(data)
print (text), "<=>", repr(data)
data = binascii.b2a_hqx(text)
text = binascii.a2b_hqx(data)
print (text), "<=>", repr(data)
谁能帮我让它工作?它应该接受输入然后将其转换为十六进制和其他并显示那些...... 我正在使用 Python 3.6,但我也有点缺乏实践...
长话短说:
data = binascii.b2a_base64(text.encode())
text = binascii.a2b_base64(data).decode()
print (text, "<=>", repr(data))
您遇到了 Python3 中的一个常见问题 - str 对象与 bytes 对象。 bytes
对象包含字节序列。一个字节可以包含 0 到 255 之间的任意数字。通常这些数字通过 ASCII table 转换为字符,如英文字母。通常在 Python 中你应该使用字节来处理二进制数据。
另一方面,str
对象包含代码点序列。当您调用 print
时,一个代码点通常代表屏幕上打印的一个字符。在内部它是字节序列所以中文符号 的
在内部保存为 3 字节长的序列。
现在解决你的问题。该函数需要输入 bytes
对象,但您从函数 input
中得到了一个 str
对象。要将 str
转换为 bytes
,您必须在 str
对象上调用 str.encode()
方法。
data = binascii.b2a_base64(text.encode())
你原来的调用binascii.b2a_base64.encode(text)
表示调用对象binascii.b2a_base64
的方法encode
,参数为text
。
函数 binascii.b2a_base64
returns bytes
包含使用 base64 算法编码的原始输入。现在要从编码数据中取回原始 str
,您必须这样调用:
# Take base64 encoded data and return it decoded as bytes object
decoded_data = binascii.a2b_base64(data)
# Convert bytes object into str
text = decoded_data.decode()
可以写成一行
decoded_data = binascii.a2b_base64(data).decode()
警告:您对 print
的调用对 Python 3 无效(它仅在 python 控制台中有效)