MicroPython中TypeError:无法将Generic_Myblocks转为int问题求助
TypeError: can't convert Generic_Myblocks to int 错误排查与解决
错误信息
Traceback (most recent call last): File "/home/robot/MyBlocks/main.py", line 134, in <module> File "/home/robot/MyBlocks/main.py", line 50, in drive_mm TypeError: can't convert Generic_Myblocks to int Exited with error code 1.
错误原因
核心问题是**drive_mm作为类的实例方法,定义时缺少第一个必选参数self**:
- 当通过类实例
myblocks.drive_mm(0, 1000, 100)调用方法时,Python会自动将实例对象(即myblocks,类型为Generic_Myblocks)作为第一个参数传递给方法。 - 原函数定义的第一个参数是
angle,导致angle实际接收的是Generic_Myblocks实例,而非传入的整数0。 - 后续调用
robot.drive(speed, angle)时,drive方法要求angle是整数类型,但传入的是类实例,因此触发类型转换错误。
另外,原代码中直接使用lm、rm、robot这些变量,没有通过实例属性访问,后续还会出现NameError,因为这些变量在方法作用域内未定义。
解决方法
1. 给实例方法添加self参数
修改drive_mm的定义,将self作为第一个参数,同时通过self访问类实例的属性:
def drive_mm(self, angle, speed, mm, brake=True): self.robot.reset() while self.robot.distance() < mm: self.robot.drive(speed, angle) self.robot.stop() if brake: self.lm.hold() self.rm.hold() else: self.lm.brake() self.rm.brake()
2. 确保类的__init__方法初始化实例属性
在Generic_Myblocks类的构造方法中,将传入的参数赋值给实例属性,这样方法内才能通过self访问:
class Generic_Myblocks: def __init__(self, ev3, robot, leftMotor, rightMotor, leftColor, rightColor, infrared): self.ev3 = ev3 self.robot = robot self.lm = leftMotor self.rm = rightMotor self.leftColor = leftColor self.rightColor = rightColor self.infrared = infrared
3. 保持调用方式不变
原调用代码无需修改:
myblocks = Generic_Myblocks(ev3, robot, leftMotor, rightMotor, leftColor, rightColor, infrared) myblocks.drive_mm(0, 1000, 100)
内容的提问来源于stack exchange,提问作者paxq
相关产品推荐
相关产品推荐

