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

如何构建pytest模块并调用function2.py函数?附错误排查

问题定位与修复步骤

1. 核心错误:SnowballStemmer初始化参数错误

报错TypeError: SnowballStemmer.__init__() got an unexpected keyword argument 'data',本质是初始化SnowballStemmer时传入了它不支持的data参数。SnowballStemmer的正确初始化仅需指定语言参数(如language='english'),无需额外传data。

错误代码示例(function2.py中)

from nltk.stem.snowball import SnowballStemmer

def wrong_stem_function(data):
    stemmer = SnowballStemmer(data=data)  # 错误:传入了不支持的data参数
    # ...后续逻辑

修正后代码

from nltk.stem.snowball import SnowballStemmer

def correct_stem_function(language='english'):
    stemmer = SnowballStemmer(language=language)  # 正确:仅指定语言参数
    # ...后续逻辑

2. pytest测试模块的正确实现

假设function2.py中有一个待测试的文本词干提取函数,以下是test_function2.py的标准写法,同时修正常见测试用例错误:

常见测试用例错误修正

  • 错误:未正确导入目标函数 → 修正:使用from function2 import 目标函数
  • 错误:测试函数未以test_开头 → 修正:所有测试函数必须命名为test_xxx,pytest才会自动识别
  • 错误:函数调用参数不匹配 → 修正:严格按照目标函数的参数要求传参
  • 错误:无有效断言 → 修正:用assert语句验证输出是否符合预期

完整示例代码

function2.py(修正后)

from nltk.stem.snowball import SnowballStemmer
from nltk.tokenize import word_tokenize

def stem_text(text, language='english'):
    stemmer = SnowballStemmer(language=language)
    tokens = word_tokenize(text)
    stemmed_tokens = [stemmer.stem(token) for token in tokens]
    return ' '.join(stemmed_tokens)

test_function2.py(正确实现)

from function2 import stem_text

# 测试英文文本词干提取
def test_stem_text_english():
    input_text = "Running faster than others"
    expected_output = "run faster than other"
    result = stem_text(input_text)
    assert result == expected_output, f"预期结果:{expected_output},实际结果:{result}"

# 测试西班牙语文本词干提取
def test_stem_text_spanish():
    input_text = "Corriendo más rápido que los demás"
    expected_output = "corriend más rápido que los dem"
    result = stem_text(input_text, language='spanish')
    assert result == expected_output, f"预期结果:{expected_output},实际结果:{result}"

3. 运行测试的命令

进入代码所在目录,在终端执行:

pytest test_function2.py -v

-v参数会显示详细测试结果,便于排查问题。

额外注意事项

  • 确保已安装依赖库:pip install nltk pytest
  • 首次使用nltk的分词功能需下载语料:在Python交互环境执行import nltk; nltk.download('punkt')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:40:39