Python导入自定义函数报错NameError: testme未定义,求解决方法
我来帮你排查下这个导入报错的问题,除了你已经确认的导入语法,还有这些常见的坑要逐一检查:
检查文件位置与Python搜索路径
先确认dbconn.py和你的主脚本是不是在同一个目录下?如果不在同一目录,直接import dbconn肯定找不到。这时候你得把dbconn所在的目录添加到Python的搜索路径里,比如在主文件开头加这段代码:import sys sys.path.append("/你/dbconn文件所在的/绝对路径") # 替换成实际路径 import dbconn另外,如果你的代码是放在一个包结构里,别忘了在对应目录下创建空的
__init__.py文件,让Python识别这是一个可导入的包。再确认testme是真正的顶层函数
再仔细瞅一眼dbconn.py里的testme函数——它是不是真的没有缩进?比如如果它被嵌套在某个类或者其他函数里面,那它就不是顶层函数,直接导入肯定找不到。正确的写法应该是:# dbconn.py里的正确写法 def testme(categ_id, poll_ids): # 函数逻辑 pass要是它缩进在
class或者另一个def下面,那你得调整它的位置,或者用类/父函数的方式调用。排查命名冲突问题
有没有可能你的主文件里不小心定义了和dbconn或者testme同名的变量?比如主文件里写了dbconn = "测试",这就会把你导入的模块给覆盖掉,自然找不到testme函数了。试试用模块前缀调用函数
如果from dbconn import testme不行,不如直接用模块名来调用,这样能明确指定来源,避免冲突:df = dbconn.testme(categId, pollIds) # 这里补全你的参数确认运行脚本的工作目录
有时候你运行脚本的工作目录不是你以为的那个,导致Python找不到模块。可以在主文件里加一行代码打印当前工作目录:import os print(os.getcwd())如果输出的目录不是主脚本所在的目录,要么切换到正确目录再运行,要么用前面说的
sys.path.append添加路径。清理Python缓存文件
要是你之前修改过dbconn.py,可能残留了.pyc文件或者__pycache__目录,这些缓存可能会影响导入。删掉这些文件/目录,然后重新运行脚本试试。
内容的提问来源于stack exchange,提问作者Rilcon42

