Python跨文件调用DSABinarySearchTree提示未定义的问题排查
解决“DSABinarySearchTree未定义”报错的方法
原因分析
报错核心是第二个文件直接使用DSABinarySearchTree类名,但该类定义在searchtree模块中,当前代码未正确引用模块内的类。同时第一个文件存在缩进错误——Python对缩进严格要求,类内方法未缩进会导致类定义不完整,同样会引发导入问题。
解决方法
方法1:直接导入目标类
修改第二个文件的导入语句,明确从searchtree模块导入DSABinarySearchTree类:
from searchtree import DSABinarySearchTree bst = DSABinarySearchTree() # Test insertion bst.insert(5) bst.insert(3) bst.insert(8) bst.insert(2) bst.insert(4) bst.insert(7) bst.insert(9)
方法2:通过模块名访问类
保持导入语句不变,实例化类时添加模块前缀:
import searchtree bst = searchtree.DSABinarySearchTree() # Test insertion bst.insert(5) bst.insert(3) bst.insert(8) bst.insert(2) bst.insert(4) bst.insert(7) bst.insert(9)
额外注意:修复第一个文件的缩进错误
第一个文件中类的方法未缩进,会导致类定义无效,必须修正缩进(以4个空格为例):
class DSATreeNode: def __init__(self, data): self.data = data self.left = None self.right = None class DSABinarySearchTree: def __init__(self): self.root = None def insert(self, data): if self.root is None: self.root = DSATreeNode(data) else: self._insert(data, self.root)
另外需补充实现_insert方法,否则调用insert时会触发新的报错。
内容的提问来源于stack exchange,提问作者Rasal.A
相关产品推荐
相关产品推荐

