pyautogui鼠标脚本调用random.randint报空范围ValueError错误
问题原因
random.randint(a, b) 要求传入的下限参数a必须小于等于上限参数b,如果a > b就会抛出ValueError: empty range for randrange()报错,也就是你遇到的错误。
你的坐标参数顺序完全写反了:
- 定义的X轴区间
HP_X = [554, 110],第一个值554远大于第二个值110 - 定义的Y轴区间
HP_Y = [567, 123],第一个值567远大于第二个值123
这就导致调用随机数函数时没有合法的取值范围,直接触发报错。
另外你对屏幕坐标规则的理解有偏差:屏幕坐标系原点(0,0)在显示器左上角,水平向右X值递增,垂直向下Y值递增。用左上角、右下角划定矩形区域时,左上角的X、Y值一定小于右下角的X、Y值,你当前传入的两组坐标都是大值在前、小值在后,不符合坐标规则。
修复方法
方案1:直接修正参数顺序
把每组坐标的小值放在前(对应左、上边界),大值放在后(对应右、下边界)即可:
import pyautogui as auto import random # 修正后的坐标区间,左边界X=110、右边界X=554,上边界Y=123、下边界Y=567 HP_X = [110, 554] HP_Y = [123, 567] auto.moveTo(random.randint(HP_X[0], HP_X[1]), random.randint(HP_Y[0], HP_Y[1]), 0.5)
方案2:兼容乱序传参的稳妥写法
如果怕后续调整坐标时再写反顺序,可以在代码里自动取区间的最小、最大值做边界,不需要手动调整顺序:
import pyautogui as auto import random HP_X = [554, 110] HP_Y = [567, 123] # 自动识别合法区间边界,不受参数传入顺序影响 target_x = random.randint(min(HP_X), max(HP_X)) target_y = random.randint(min(HP_Y), max(HP_Y)) auto.moveTo(target_x, target_y, 0.5)
提示:取点时可以打开系统截图工具,鼠标悬停在目标位置就能看到实时坐标数值,确认边界值大小后再填入参数,能减少这类低级错误。
内容的提问来源于stack exchange,提问作者4lek5
相关产品推荐
相关产品推荐

