Nonetype对象没有attribute get\u datos()

2024-10-01 17:23:43 发布

您现在位置:Python中文网/ 问答频道 /正文

from node import *
from copy import deepcopy
import pygame
from PIL import Image

def buscar_solucion(inicio, solucion):

    visitados=[]
    nodo_i=Nodo(inicio)

    while nodo_i.get_datos() != solucion:

        nodo_i = deep_search(nodo_i,solucion,visitados)

    moves=[]
    moves.append(solucion)

    while nodo_i.get_padre() != None:
        pater=nodo_i.get_padre()
        moves.append(pater.get_datos())
        nodo_i=pater
    moves.reverse()
    print moves

 def operaciones_h(dades):
   r=[]
   i=0
   while dades[i] != dades[-1]:
      s=deepcopy(dades)
      s[i]=dades[i+1]
      s[i+1]=dades[i]
      r.append(Nodo(s))
      i+=1
   return r

def deep_search(ini,sol,visit):

    visit.append(ini.get_datos())

    if ini.get_datos() == sol:
        return ini

    else:
        hijos=operaciones_h(ini.get_datos())
        for hijo in hijos:
            if hijo.get_datos() not in visit:
                hijo.set_padre(ini)
                return deep_search(hijo,sol,visit)

我遇到的问题是在第14行,当创建类Nodo的实例时。我得到的错误是:

^{pr2}$

该类在一个名为node.py的文件中定义。问题可能出在进口吗?或者在定义实例时?在


Tags: fromimportgetdefvisitiniappendmoves
2条回答

在某些情况下,nodo_i = deep_search(nodo_i,solucion,visitados)调用返回None。在deep_search中有以下代码:

else:
    hijos=operaciones_h(ini.get_datos())
    for hijo in hijos:
        if hijo.get_datos() not in visit:

如果operaciones_h返回一个空列表,或者如果hijo中没有一个值与您的if语句匹配,则函数返回{},您将看到异常。在

问题出在你的deep_search函数中,它并不总是返回任何内容。例如,考虑一下如果operaciones_h(ini.get_datos())返回一个空列表会发生什么:将永远不会进入for hijo in hijos循环。即使这样,如果所有数据都在visit中,if语句也永远不会为真,也永远不会命中return语句。在这两种情况下,deep_search的值将是None。在

您应该确保通过deep_search的所有路径都以返回Nodo对象结束。在

相关问题 更多 >

    热门问题