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

问题描述 投票:0回答:1

在编写一组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不会将字节隐式转换为其他类的内置方法是什么?

[编辑:我看到使用冒号碰巧是这次获得我想要的结果,但是我不明白为什么,并且因为我不知道为什么,所以我不相信它不会在以后打破。 ]

python python-3.x
1个回答
0
投票
Range [x:y]总是返回相同的类型,它自然是子列表/子字节。[x]是单个数组项。 bytes是字节值的列表(简称为int)
© www.soinside.com 2019 - 2024. All rights reserved.