Value Error: Too many values to unpack
When I execute it, it is giving me an eror i.e too many values to unpack? How do i make it to work properly.开发者_StackOverflow社区
stack = util.Stack()
closed = []
child = []
index = 0
currNode = problem.getStartState()
node = currNode
stack.push(node)
while not stack.isEmpty():
node = stack.pop()
if problem.isGoalState(node):
print "true"
closed.append(node)
else:
child = problem.getSuccessors(node)
for nodes in child:
stack.push(nodes)
closed.append(node)
return None
Error is:
File line 90, in depthFirstSearch
child = problem.getSuccessors(node)
File line 179, in getSuccessors
x,y = state
**ValueError: too many values to unpack**
The code for the getsuccessor func is:
def getSuccessors(self, state):
"""
Returns successor states, the actions they require, and a cost of 1.
"""
successors = []
for action in [Directions.NORTH, Directions.SOUTH, Directions.EAST, Directions.WEST]:
x,y = state
dx, dy = Actions.directionToVector(action)
nextx, nexty = int(x + dx), int(y + dy)
if not self.walls[nextx][nexty]:
nextState = (nextx, nexty)
cost = self.costFn(nextState)
successors.append( ( nextState, action, cost) )
The values returned for this function initially:
problem.getStartState() - (5, 5)
problem.isGoalState(problem.getStartState())- False
problem.getSuccessors(problem.getStartState()) - [((5, 4), 'South', 1), ((4, 5), 'West', 1)]
First, it's unlikely that's the whole getSuccessors
method, since there's no return value.
To guess, I'd say getSuccessors
returns a list of tuples: (nextState, action, cost). You're storing each of those as nodes, which will fail when you pass one back into the method, and it tries to unpack the three values as two.
You owe it to yourself to find a decent debugger, and learn how to use it. I use Eclipse (with PyDev), and it will significantly help you with these sorts of bugs.
Not sure why there is an inconsistent sized tuples being passed to getSuccessors
, but you could probably fix it by checking the length of node
after the node = stack.pop()
line. If it's 3, then you'll want to pass node[0]
in the line child = problem.getSuccessors(node)
.
精彩评论