实现统一代价搜索算法时遇AttributeError:NoneType无edges属性
统一代价搜索实现中'start_node'为None的常见原因
构建图时未正确创建/匹配起始节点
检查build_graph函数的CSV读取逻辑:如果CSV数据里没有对应起始节点的记录,或者读取时节点名称匹配出错(比如大小写不一致、拼写错误),从Graph中获取start_node时就会返回None。比如调用graph.get_node("Start"),但CSV里的节点名是"start",就会匹配失败拿到None。Graph类的节点查找方法存在逻辑错误
如果Graph类里的节点查找方法(比如get_node)实现有问题,比如内部存储节点的字典没有正确添加节点,或者查找时返回逻辑错误(比如找不到节点时直接返回None而无提示),都会导致获取的start_node为None。例如添加节点时只存了节点名称,没存对应的Node对象,查找自然拿不到有效实例。起始节点参数传递错误
调用uniform_cost_search函数时,传入的起始节点参数本身就是None,而非有效的Node实例。比如调用时误传了未初始化的变量,或者把节点名称字符串直接传入,而不是从Graph中获取的Node对象。Node实例创建过程异常
虽然Node类声明了edges列表,但如果创建Node实例时抛出未捕获的异常,会导致实例创建失败,变量被赋值为None。比如__init__方法里有错误逻辑导致初始化失败,代码却继续执行,最终start_node变成None。
内容的提问来源于stack exchange,提问作者kamilcoban
相关产品推荐
相关产品推荐

