我正在以这种格式进行按摩: '02 01 01 21 03 03 02 02 01 01 20 b6 01 0 26 cd 00 03 30 63 a4 22 01'
并且需要解析它,转换为十六进制,切成薄片然后转换回去,但是不确定我是否做对了。我从问题的标题中得到了这个错误,因为“ buf”显然是一个列表,而不是字符串。其实,我不确定我是否正在正确执行此转换?
def parse_code(msg):
buf = (hashlib.sha256(bytearray.fromhex(msg)).hexdigest())
buf = int(buf, 16)
datetime_now = datetime.now()
log_date = datetime_now.isoformat()
try:
prepare_adress = buf[16:22]
hex_adress = int(prepare_adress, 16)
new_adress =hex_adress + 0x200
adress = hex(new_adress).upper()
id = buf[4:]
prepare_usage = buf[1:2]
hex_usage = int(prepare_usage, 16)
new_usage =hex_usage + 0x200
usage = hex(new_usage).upper()
time_a = int(time())
except Exception as e:
print(e)
有什么主意如何处理错误,也许有一些建议,可以提供更好的方法将消息转换为十六进制?
答案 0 :(得分:2)
第一件事:帮自己一个忙,摆脱这个Braindead的try / except子句,该子句完全没有用,当出现问题时,它会阻止您获得完整的回溯(回溯对于调试非常有用,因此您永远不想失去它)。通常,只有捕获异常才能正确处理,否则让它们传播。
现在wrt /您当前的错误原因很明显-此处:
buf = int(buf, 16)
您将buf
设为整数。然后在这里:
prepare_adress = buf[16:22]
您尝试对其进行切片-这是没有意义的,整数是标量,而不是序列,并且不能以任何方式下标,切片或迭代。