如何构建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
相关产品推荐
相关产品推荐

