Python turtle调用color方法报TypeError函数无len()属性求解
Python Turtle 绘图报错排查修复
报错原因
你的代码存在两处逻辑错误,直接触发TypeError: object of type 'function' has no len()报错:
- 传参错误:
timmy.color(random_color)这行没有加括号调用random_color函数,直接把函数对象本身作为参数传给了color方法,turtle解析颜色时期待拿到颜色字符串/RGB元组,拿到函数对象后无法执行长度判断,直接抛出类型错误。 - 函数逻辑错误:自定义的
random_color函数存在两个问题:- 函数定义为无参形式,内部却传入r、g、b三个参数递归调用自身,运行时会触发参数数量不匹配错误
- 函数最终返回值是
random_color函数本身,不是生成的RGB颜色值,即使正确调用也拿不到合法颜色参数。
报错栈核心提示:turtle内部解析颜色逻辑执行
len(color)时,发现传入的color是function类型,不存在长度属性,因此中断运行。
修复后可运行代码
import turtle import random timmy = turtle.Turtle() turtle.colormode(255) timmy.shape("turtle") timmy.color("red") turtle_heading = [0, 90, 180, 270] def random_color(): r = random.randint(0, 255) g = random.randint(0, 255) b = random.randint(0, 255) return (r, g, b) for i in range(200): timmy.setheading(random.choice(turtle_heading)) timmy.color(random_color()) timmy.forward(30) turtle.done()
修复点说明
- 修正
random_color逻辑:删除错误的递归调用,直接返回生成的(r, g, b)三元组,适配turtle 255色域模式的颜色参数要求 - 调用color方法时给
random_color加括号,执行函数拿到实际返回的颜色值后再传入 - 末尾增加
turtle.done(),避免绘图完成后窗口直接闪退。
内容的提问来源于stack exchange,提问作者Chris Ormerod
相关产品推荐
相关产品推荐

