开发者

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).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜