Nonetype对象没有属性get_data()

时间:2013-04-17 09:13:49

标签: python class object instance nonetype

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)

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

AttributeError: 'NoneType' object has no attribute 'get_datos'

Class在名为node.py的文件中定义。问题可能在于导入?或者在定义实例时?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

对于某些情况,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语句,则函数返回None,您将看到异常。