KeyError: 'Ключ x не найден.'

У меня есть этот код из фильтра MCEDit, который я редактировал:

def getCommand(level, box):
    for x in xrange(box.minx,box.maxx):
        for y in xrange(box.miny,box.maxy):
            for z in xrange(box.minz,box.maxz):
                t = level.tileEntityAt(x, y, z)
                                if t and t["id"].value == "Control":
                                        if "id" in t: del t["id"]
                                        if "x" in t: del t["x"]
                                        if "y" in t: del t["y"]
                                        if "z" in t: del t["z"]
                                        return (t, x, y, z)
        return (None, None, None, None)

И я получаю эту ошибку:

'KeyError: 'Key x not found.'

Пожалуйста помоги!

РЕДАКТИРОВАТЬ:

Исправлено, спасибо @Texelelf:

def getCommand(level, box):
for x in xrange(box.minx,box.maxx):
    for y in xrange(box.miny,box.maxy):
        for z in xrange(box.minz,box.maxz):
            t = deepcopy(level.tileEntityAt(x,y,z))
            if t and t["id"].value == "Control":
                if "id" in t: del t["id"]
                if "x" in t: del t["x"]
                if "y" in t: del t["y"]
                if "z" in t: del t["z"]
                return (t, x, y, z)
    return (None, None, None, None)

2 ответа

Решение
def getCommand(level, box):
for x in xrange(box.minx,box.maxx):
    for y in xrange(box.miny,box.maxy):
        for z in xrange(box.minz,box.maxz):
            t = deepcopy(level.tileEntityAt(x,y,z))
            if t and t["id"].value == "Control":
                if "id" in t: del t["id"]
                if "x" in t: del t["x"]
                if "y" in t: del t["y"]
                if "z" in t: del t["z"]
                return (t, x, y, z)
    return (None, None, None, None)

Получил ответ, благодаря @Texelelf в Твиттере

Вот ваша функция:

def getCommand(level, box):
    for x in xrange(box.minx,box.maxx):
        for y in xrange(box.miny,box.maxy):
            for z in xrange(box.minz,box.maxz):
                t = level.tileEntityAt(x, y, z)
                                if t and t["id"].value == "Control":
                                        if "id" in t: del t["id"]
                                        if "x" in t: del t["x"]
                                        if "y" in t: del t["y"]
                                        if "z" in t: del t["z"]
                                        return (t, x, y, z)
        return (None, None, None, None)

Во второй строке вашего кода вы назначаете x в for петля. Затем вы продолжаете звонить t = level.tileEntityat(x, y, z)Это означает, что вы ищете значение x, как определено во второй строке. Вместо этого окружите свой x, y, а также z в цитатах, чтобы сделать их строками. Я не совсем уверен, что это то, что вы хотите, потому что я не знаю, что в level.tileEntityAt(x, y, z), но я делаю мои лучшие предположения.

Отредактированный код:

def getCommand(level, box):
    for x in xrange(box.minx,box.maxx):
        for y in xrange(box.miny,box.maxy):
            for z in xrange(box.minz,box.maxz):
                t = level.tileEntityAt("x", "y", "z")
                    if t and t["id"].value == "Control":
                        if "id" in t: del t["id"]
                        if "x" in t: del t["x"]
                        if "y" in t: del t["y"]
                        if "z" in t: del t["z"]
                        return (t, x, y, z)
        return (None, None, None, None)
Другие вопросы по тегам