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

Python图片拼贴程序报错:Inappropriate argument value(类型正确)求助

图片拼贴画代码报错排查求助

我正在完成一门课程作业,需使用三张图片创建拼贴画。运行程序时出现错误提示:

Inappropriate argument value (of correct type). An error occurred attempting to pass an argument to a function. Please check line 26

疑惑的是,第26行代码写法与上方另一张图片的处理代码完全相同,但该行并未报错,希望得到问题排查帮助。以下是我的代码:

def createCollage():
  fileName1 = pickAFile()
  src1= makePicture(fileName1)
  print(src1)
  filename2= pickAFile()
  src2=makePicture(filename2)
  print(src2)
  filename3=pickAFile()
  src3=makePicture(filename3)
  print (src3)
  canvas=makeEmptyPicture(1300,1000)
  print canvas
  targetX=0
  for sourceX in range(0,getWidth(src3)):
    targetY=100
    for sourceY in range(0,getHeight(src3)):
      color=getColor(getPixel(src3,sourceX,sourceY))
      setColor(getPixel(canvas,targetX,targetY), color)
      targetY=targetY+1
    targetX=targetX+1
  targetX=650
  for sourceX in range(0,getWidth(src1)-100):
    targetY= 300
    for sourceY in range(0,getHeight(src1)-50):
      color=getColor(getPixel(src1,sourceX,sourceY))
      setColor(getPixel(canvas,targetX,targetY), color)
      targetY=targetY+1
    targetX=targetX+1
  targetX=600
  for sourceX in range(0,getWidth(src2)):
    targetY=430
    for sourceY in range(150,getHeight(src2)):
      color=getColor(getPixel(src2,sourceX,sourceY))
      setColor(getPixel(canvas,targetX,targetY), color)
      targetY=targetY+1
    targetX=targetX+1
  targetX=10
  for sourceX in range(20,getWidth(src2)-100):
    targetY=270
    for sourceY in range(0,getHeight(src2)-50):
      color=getColor(getPixel(src2,sourceX,sourceY))
      setColor(getPixel(canvas,targetX,targetY), color)
      targetY=targetY+1
    targetX=targetX+1
  targetX=50
  for sourceX in range(0,getWidth(src1)):
    targetY= 430
    for sourceY in range(120,getHeight(src1)):
      color=getColor(getPixel(src1,sourceX,sourceY))
      setColor(getPixel(canvas,targetX,targetY), color)
      targetY=targetY+1
    targetX=targetX+1
  show(src1)
  show(src2)
  show(src3)
  show(canvas)
  return canvas
  writePictureTo(canvas,("C:/Temp Python/CollagePic.png"))  
createCollage()

排查方向与解决建议

1. 画布坐标越界(最可能原因)

第26行是处理src1的setColor调用,报错核心是targetX或targetY超出了画布canvas的有效坐标范围:

  • 画布宽度1300,有效X坐标范围为0~1299;高度1000,有效Y坐标范围为0~999。
  • 若getWidth(src1)-100数值过大,加上起始targetX=650后,最终targetX会超过1299;同理getHeight(src1)-50加上起始targetY=300后,可能超过999。

验证方法:在第22行前添加打印语句,查看关键数值:

print("src1宽度:", getWidth(src1), "最终targetX:", 650 + (getWidth(src1)-100))
print("src1高度:", getHeight(src1), "最终targetY:", 300 + (getHeight(src1)-50))
print("画布宽高:", getWidth(canvas), getHeight(canvas))

修复方法:修改循环范围,确保坐标不越界:

# 限制X方向不超出画布
max_sourceX = min(getWidth(src1)-100, getWidth(canvas) - targetX)
for sourceX in range(0, max_sourceX):
    targetY= 300
    # 限制Y方向不超出画布
    max_sourceY = min(getHeight(src1)-50, getHeight(canvas) - targetY)
    for sourceY in range(0, max_sourceY):
        color=getColor(getPixel(src1,sourceX,sourceY))
        setColor(getPixel(canvas,targetX,targetY), color)
        targetY=targetY+1
    targetX=targetX+1

2. 循环范围逻辑错误

如果src1宽度小于100,getWidth(src1)-100会得到负数,此时range(0, 负数)不会生成有效循环,可添加判断避免异常:

if getWidth(src1) >= 100 and getHeight(src1) >=50:
    targetX=650
    for sourceX in range(0,getWidth(src1)-100):
        # 原循环代码
else:
    print("src1尺寸过小,无法执行该段裁剪")

3. 额外bug:return语句位置错误

代码中return canvas在writePictureTo之前,会导致保存图片的代码永远不会执行,需调整顺序:

show(canvas)
writePictureTo(canvas, "C:/Temp Python/CollagePic.png")  
return canvas

内容的提问来源于stack exchange,提问作者M Agrippa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:45:33