仅遍历数组的特定部分的正确方法?

时间:2019-02-22 04:41:13

标签: python indexing

Traceback (most recent call last):
 File "C:/Users/yaahy/PycharmProjects/Testing/testing1.py", line 45, in 
<module>
    clicktheshit()
  File "C:/Users/yaahy/PycharmProjects/Testing/testing1.py", line 41, in 
clicktheshit
    pyautogui.click(chords[0], chords[1])
TypeError: 'NoneType' object is not subscriptable

由于我的脚本在每个像素上的搜索速度都很慢,因此我想通过切出一些多余的像素(不在游戏区域中),而是使用

来加快速度
pxlss = pxls[60:400] 

不起作用,我不知道问题所在,因为它可以在不尝试切掉无用的东西的情况下起作用,只是速度很慢

import pyautogui
import time
from PIL import Image
import mss
import mss.tools
import cv2
import numpy as np
from PIL import ImageGrab
import colorsys

time.sleep(2)

def shootfunc(xc, yc):
    pyautogui.click(xc, yc)

gameregion = [71, 378, 328, 530]

def findpixels(pxls):
    pxlss = pxls[60:400]
    for row, pxl in enumerate(pxlss):
        for col, pxll in enumerate(pxl):
            if col >= 536 and col <= 808 and row <= 515 and row >= 371 and pxll == (102, 102, 102):
                foundpxl = pxll
                print(str(col) + " , " + str(row))
                return [col, row]
                break


def clicktheshit():
    with mss.mss() as sct:
        region = {'top': 0, 'left': 0, 'width': 1920, 'height': 1080}
        imgg = sct.grab(region)
        pxls = imgg.pixels
        chords = findpixels(pxls)
        pyautogui.click(chords[0], chords[1])

xx = 0
while xx <= 3000:
        clicktheshit()
        xx = xx + 1
        time.sleep(.01)
        clicktheshit()

1 个答案:

答案 0 :(得分:3)

阅读错误消息和回溯应该给您第一个提示:

from keras import backend as K 

# load and use model 1

K.clear_session()

# load and use  model 2

K.clear_session()`

这意味着在这一行中,File "C:/Users/yaahy/PycharmProjects/Testing/testing1.py", line 41, in clicktheshit pyautogui.click(chords[0], chords[1]) TypeError: 'NoneType' object is not subscriptable chords对象-当然不能被索引-而不是您期望的None列表。

现在,为什么要获得此[col, row]而不是预期的列表很简单:您的None函数仅在实际找到匹配项时才返回此列表-否则,该函数最终没有显式显示findpixels语句,因此它隐式返回return

IOW,您的问题与“仅迭代数组的特定部分的正确方法”无关,而与不知道如何调试程序有很大关系。