为何直接赋值十六进制元组无错,动态生成却报TypeError?
问题原因与解决办法
错误根源
你动态生成的p是字符串类型,而直接赋值的p是整数组成的元组,类型不匹配导致了比较时的类型错误。
- 直接赋值
p = (0x41, 0x31, 0x31, 0x37)时,p是包含4个整数的元组,每个元素是十六进制字面量对应的十进制整数(比如0x41等价于整数65)。 - 你的动态代码最后一步
p=(f"({','.join(ms_txt_list)})"),实际是把拼接后的字符串"(0x41,0x31,0x31,0x37)"赋值给了p。当你用这个字符串和整数做比较操作时,自然会触发TypeError: '<=' not supported between instances of 'str' and 'int'。
正确的动态生成代码
需要将每个十六进制格式的字符串转换为整数,再组成元组,而不是拼接成字符串:
New_MS = 41313137 str_ms = str(New_MS) n = 2 split_str_ms = [str_ms[i : i + n] for i in range(0, len(str_ms), n)] # 将每个十六进制格式的字符串转为整数,再生成元组 ms_num_list = [int(f"0x{d.ljust(2, '0')}", 16) for d in split_str_ms] p = tuple(ms_num_list)
这样生成的p和直接赋值的p类型完全一致,都是整数元组,后续的比较操作就能正常执行。
内容的提问来源于stack exchange,提问作者Mohammed Farttoos
相关产品推荐
相关产品推荐

