You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类调用内部函数触发NameError问题求助

解决类方法调用时的NameError问题

看起来你遇到的是类内部方法调用时的作用域问题,导致Python找不到tokenize这个名称。我来帮你拆解可能的原因和对应的解决办法:

1. 最常见的原因:类方法未用self.前缀调用

如果tokenize是你Preprocess类内部定义的方法,那直接写tokenize是无法被Python识别的——类的实例方法必须通过self.来引用自身的其他方法。

你需要把调用代码改成这样:

self.data['review_text'].progress_map(self.tokenize)

同时要确保tokenize方法是正确缩进在类内部的,完整的类结构示例如下:

import unicodedata
import re
from tqdm import tqdm
tqdm.pandas()

class Preprocess:
    def __init__(self, data):
        self.data = data

    def tokenize(self, tweet):
        try:
            token = unicodedata.normalize("NFKD", tweet).encode("ascii", "ignore").decode("utf8")
            # 补全你的正则处理逻辑
            token = re.sub(r'[\?\.!\…]+', '', token)
            # 其他分词/清洗步骤
            return token
        except Exception as e:
            print(f"分词出错:{e}")
            return ""

    def postprocess(self):
        # 正确调用类内部的tokenize方法
        self.data['review_text'] = self.data['review_text'].progress_map(self.tokenize)
        # 后续的其他后处理逻辑
        return self.data

2. 如果tokenize是类外部的独立函数

要是tokenize是定义在类外面的函数,那需要确保它在postprocess方法的作用域内是可见的:

  • 检查函数是否和类在同一个文件里,或者是否已经通过import导入
  • 检查函数名拼写是否一致(比如有没有把tokenize写成英式拼写的tokenise)

3. 额外注意:不要误调用函数

确保你传递给progress_map的是函数引用,而不是执行后的结果——也就是不要写成self.tokenize()(带括号会直接执行函数,返回的可能不是函数对象),而是self.tokenize。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:16:53