在编写一组 Python 脚本来解析来自 Decawave DWM1001 模块的 TLV 数据时,我遇到了这样一种情况:当我从字节列表中请求一个与多个元素时,函数的返回类型会发生变化。我认为问题在于我使用的语法允许 Python 自动将字节数据转换为它认为对我更有用的类型。这会导致调用函数(它期望字节形式的数据)在尝试从字节转换为 int 或字符串等时中断。我一直在逐个使用条件语句来破解它,但它开始使我的代码变得不必要地难以阅读。我真的宁愿纠正我糟糕的语法理解。这是简化的示例:>>> buffer = bytes([1,2,3,4])>>> buffer[0:1]'\x01'>>> type(_)<class 'bytes' >>>> buffer[0] # Expected identical output as above1>>> type(_)<class 'int'>为什么输出不一样?我知道在尝试将返回值从字节转换为其他值之前,我可以使用 isinstance() 检查返回值是否为字节,但我已经看到我同意这会在代码中造成脆弱性的建议,这可能会导致如果有人以我的工作为基础,就会出现问题。确保 Python3.x 在索引列表时不会将字节隐式转换为其他类的内置方法是什么?[编辑:我看到这次使用冒号恰好得到了我想要的结果,但我不明白为什么,因为我不知道为什么,我不相信它以后不会中断。]
1 回答

月关宝盒
TA贡献1772条经验 获得超5个赞
范围[x:y]总是返回相同的类型,它自然是子列表/子字节。[x] 然后是单个数组项。bytes 是字节值列表(只是 int)
int 的行为列表是相同的
>>> a = [1, 2, 3]
>>> a[0:1]
[1]
>>> a[0]
1
添加回答
举报
0/150
提交
取消