reg_sci = bytearray([85, 90, 20, 230, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 152]) print(reg_sci) DIFF_R = self.textEdit_dir_r.toPlainText() DIFF_R = int(DIFF_R) reg_sci[6] = reg_sci[6] + floor(DIFF_R//256) reg_sci[7] = DIFF_R % 256 reg_sci[22] = sum(reg_sci[0:21]) reg_sci[22] = reg_sci[22] % 256 parent_serial = main.get_serial() parent_serial.write(reg_sci)报错:bytearray(b'UZ\x14\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98') byte must be in range(0, 256)
时间: 2024-03-29 17:38:40 浏览: 49
根据你提供的代码,错误发生在 `parent_serial.write(reg_sci)` 这一行。这个错误提示信息和之前一样,说明 `reg_sci` 数组中的某个元素超出了 0 到 255 的范围。
根据你提供的 `reg_sci` 数组,发现第 3 个元素的值是 20,但是后面的值都是 0,这可能不是你想要的结果。另外,在对 `reg_sci[6]` 进行赋值时,使用了加法,但是这个元素的值可能超出了 0 到 255 的范围,需要使用取模操作确保它的值在正确的范围内。
建议检查一下代码逻辑,确保 `reg_sci` 数组中的所有元素都在 0 到 255 的范围内,特别是在对其进行加法或减法操作时。如果你需要更多的帮助,请提供更多的上下文信息。
相关问题
try: reg_sci = bytearray([85, 90, 4, 230, 128, 0, 25]) parent_serial = super().get_serial() parent_serial.write(reg_sci) d = parent_serial.read(3) DataLength = d[2] d = parent_serial.read(DataLength) DIFF_R = d[2] * 256 + d self.textEdit_dir_r.setText(DIFF_R) except Exception as e: print(e)报错'Child' object has no attribute 'serial'
根据你的代码以及之前的描述,我猜测你在父类 `Parent` 中定义了一个名为 `_serial` 的属性用于存储串口对象,然后在子类 `Child` 中调用了父类的方法来使用这个串口对象。但是在子类中调用父类方法时,出现了 `'Child' object has no attribute 'serial'` 错误,这是因为子类没有定义名为 `serial` 的属性。
解决这个问题的方法是,在子类中定义一个名为 `_serial` 的属性,用于保存串口对象,并在父类中的 `get_serial()` 方法中返回这个属性。例如:
```python
class Parent:
def __init__(self):
self._serial = Serial(...) # 父类中的串口对象
def get_serial(self):
return self._serial # 返回父类中的串口对象
class Child(Parent):
def __init__(self):
super().__init__()
self._serial = Serial(...) # 子类中的串口对象
def use_parent_serial(self):
parent_serial = super().get_serial() # 调用父类方法获取串口对象
parent_serial.write(...) # 使用父类中的串口对象
child = Child()
child.use_parent_serial()
```
在这个例子中,父类中保存了一个名为 `_serial` 的属性,用于存储串口对象。在子类中,我们也定义了一个名为 `_serial` 的属性,用于保存子类中的串口对象。在子类的方法中,我们通过调用 `super().get_serial()` 方法来获取父类中的串口对象,并使用它进行操作。这样就可以避免属性名冲突的问题了。
python raw_bytes = bytearray(2520)表示什么意思?
这行代码创建了一个包含2520个元素的bytearray对象,每个元素都初始化为0。
在Python中,bytearray是一种可变的字节数组类型,它可以存储任意字节序列并对其进行修改。bytearray可以通过索引访问和修改单个元素,也可以使用切片操作访问和修改多个元素。
在这个例子中,bytearray对象的长度为2520,即它包含2520个字节,每个字节的值都为0。可以通过下标访问和修改每个字节的值,例如:
```python
raw_bytes = bytearray(2520)
raw_bytes[0] = 0x12 # 将第一个字节设置为0x12
raw_bytes[1] = 0x34 # 将第二个字节设置为0x34
```
这里使用了十六进制表示法来设置字节的值,0x12代表十进制的18,0x34代表十进制的52。
阅读全文