Python跨文件调用生成渐变效果触发NoneType与int比较错误
问题原因
- 直接触发报错的核心问题:
color_change函数没有返回值,Python中所有未显式写return的函数默认返回None,你在gradient函数中执行x_color1 = color_change(x_color1)、y_color1 = color_change(y_color1)时,相当于把None赋值给了x/y变量,后续执行x_color1 >= width比较时,就出现了None类型和int类型不能比较的报错。 - 隐藏的逻辑错误:你在
gradient函数中对red/green/blue/red_change/green_change/blue_change变量赋值时,没有声明它们是全局变量,所以修改的只是gradient函数内的局部变量,全局的变量值始终是初始的0,就算解决了返回值问题,渐变颜色也不会正常变化。
修复方案
- 修改
color_change函数,新增return语句返回计算后的坐标值:
def color_change(color_change): global red global green global blue global red_change global green_change global blue_change red += red_change green += green_change blue += blue_change color_change += 1 # 新增返回语句 return color_change
- 在
gradient函数开头新增全局变量声明,让函数内对颜色相关变量的修改生效到全局:
def gradient(start_red,start_green,start_blue,stop_red,stop_green,stop_blue,gradient_direction): # 新增全局声明 global red, green, blue, red_change, green_change, blue_change red = start_red green = start_green blue = start_blue # 后续原有代码保持不变
修改完成后重新运行paint.py即可正常输出渐变效果。
内容的提问来源于stack exchange,提问作者Keegry
相关产品推荐
相关产品推荐

