You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:42:57