如何为十六进制编码字符串正确编写‘if in’判断语句?
解决TypeError: bytes-like object is required, not 'str'问题
咱们来一步步拆解你的问题哈:
首先看报错信息TypeError: a bytes-like object is required, not 'str',根源是类型不匹配:
codecs.encode(b'hello', 'hex_codec')执行后返回的是bytes对象(比如b'68656c6c6f')- 你判断的时候用的是字符串
"t",Python不允许直接在bytes类型里查找字符串类型的内容,这就触发了错误。
另外你的代码还有两个小坑:
- 你写的是
if "t" in pkts1:,这里的"t"是字符串字面量,而你实际要检查的是变量t的值,得去掉引号; - 变量
t的值写错了——"hello"的十六进制编码是68656c6c6f,你写成了68656c6c6df(多了个d),就算类型问题解决了也匹配不上。
修正后的代码
import codecs t = '68656c6c6f' # 修正正确的十六进制值 pkts1 = codecs.encode(b'hello', 'hex_codec') # 方案1:把bytes转成字符串再判断 if t in pkts1.decode('utf-8'): print('success') # 或者方案2:把字符串t转成bytes再判断 # if t.encode('utf-8') in pkts1: # print('success')
关键修改点说明
- 修正了
t的十六进制值,确保和"hello"的编码结果一致; - 要么把
pkts1(bytes类型)用decode('utf-8')转成字符串,要么把t(字符串类型)用encode('utf-8')转成bytes,保证两边类型统一; - 把判断条件里的
"t"改成变量t,这样才是检查你定义的变量值是否存在。
运行修正后的代码就能正常输出success啦~
内容的提问来源于stack exchange,提问作者Keondre
相关产品推荐
相关产品推荐

