在索引列表时,确保 Python3.x 不会隐式将字节转换为其他类的内置方法是什么?



在编写一组 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 above
1
>>> type(_)
<class 'int'>

为什么输出不相同? 我知道我可以使用 isinstance(( 在尝试将其从字节转换为其他内容之前检查返回值是否为字节,但我看到了我同意的建议,即这可能会在代码中造成脆弱性,如果有人在我的工作上构建,可能会导致问题。

在索引列表时,确保 Python3.x 不会隐式将字节转换为其他类的内置方法是什么?

[编辑:我看到使用冒号恰好让我这次得到我想要的结果,但我不明白为什么,因为我不知道为什么,我不相信它以后不会中断。

范围[x:y]总是返回相同的类型,它自然是子列表/子字节。 [x] 是单个数组项。字节是字节值的列表(简单地说是整数(

int 行为列表的方式相同

>>> a = [1, 2, 3]
>>> a[0:1] 
[1]
>>> a[0]
1

最新更新