You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python同一模块(.py文件)内无法找到方法的问题及代码示例

解决Python同一文件/模块内找不到方法的问题

从你贴的代码来看,出现“找不到方法”的报错,大概率是依赖项缺失或者模块引用方式不对,咱们一步步拆解问题来解决:

一、同一文件内(比如model.py)找不到方法的排查

  1. 核心依赖未导入/定义
    你的tokenize函数里用到了deepcut.tokenizestop_list,但代码里完全没看到这俩的来源——Python当然会报“找不到名称”的错误!
    赶紧补上:

    # model.py 开头先加这些
    import deepcut
    # 定义停用词列表(可以手动写,也可以从文件加载)
    stop_list = {"的", "了", "是", "我", ...}  # 替换成你的实际停用词
    

    另外,CountVectorizerjoblib也得导入,不然创建和保存转换器的时候也会报错:

    from sklearn.feature_extraction.text import CountVectorizer
    import joblib
    
  2. 代码执行顺序问题
    好在你把tokenize定义写在了调用它的bow_transformer1前面,这部分没问题——记住Python是从上到下执行的,函数定义必须在调用之前,否则也会找不到方法。

二、跨模块(比如use_model.py调用model.py方法)的正确姿势

你现在在use_model.py里重复写了一遍tokenize,这不仅冗余,还容易因为stop_listdeepcut的定义不一致导致奇怪问题。正确做法是直接从model模块导入:

# use_model.py 里的正确写法
import deepcut
from model import tokenize, stop_list  # 直接导入model里的函数和变量

def preprocess(data):
    # 直接用导入的tokenize就行
    processed_tokens = tokenize(data["text"])
    # 你的预处理逻辑...

注意模块路径:

  • 如果model.pyuse_model.py在同一个文件夹下,上面的导入直接生效;
  • 如果不在同一目录,要么把model所在的文件夹加入Python环境变量,要么用相对导入(比如from .model import tokenize,但这要求你的代码是作为模块运行,不能直接双击执行脚本)。

三、加载保存的模型时的坑

当你在use_model.py里加载CountVectorizer1.pkl时,必须确保tokenize函数在当前环境中能被找到——因为joblib保存的转换器会依赖这个函数的定义。所以加载前一定要先导入model里的tokenize

# use_model.py 加载模型的代码
import joblib
from model import tokenize  # 必须导入,不然加载时会找不到tokenize

bow_transformer1 = joblib.load('CountVectorizer1.pkl')

内容的提问来源于stack exchange,提问作者patppd

火山引擎 最新活动