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
相关产品推荐
相关产品推荐

