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)