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

解决main.py调用evaluation.py中f_score函数时的NameError问题

解决main.py调用f_score时的NameError问题

嘿,我来帮你搞定这个NameError的问题!你现在遇到的情况是Python找不到你想调用的f_score函数,结合你的项目结构和代码,主要有几个地方需要调整:

一、先搞定模块导入的路径问题

你的项目结构是这样的:

src/
├── __init__.py
├── evaluation.py
└── main.py

如果你的运行方式是在src目录外面执行python src/main.py,这时候Python的默认搜索路径里不包含src目录,所以直接写from evaluation import *会找不到这个模块。这里有两种靠谱的解决办法:

方法1:用相对导入(推荐)

因为main.py和evaluation.py在同一个包(src)下面,把导入语句改成相对导入的形式:

# 只导入f_score函数(更规范)
from .evaluation import f_score

# 或者如果你确实需要导入所有内容
from .evaluation import *

方法2:手动把src目录加入Python路径

如果不想用相对导入,可以在main.py的最顶部加一段代码,把当前脚本所在的src目录加入Python的搜索路径:

import sys
from pathlib import Path

# 获取当前脚本所在的src目录路径
src_dir = Path(__file__).parent
sys.path.append(str(src_dir))

# 现在就能正常导入了
from evaluation import f_score

二、修复evaluation.py里的函数逻辑错误

另外,你的evaluation.py里的f_score函数有个致命问题:你只写了F1公式的注释,但根本没计算f1的值,最后直接返回了一个未定义的f1变量——就算导入成功,调用时也会报错。你得补全函数的计算逻辑,比如这样:

from collections import Counter

def f_score(pred, answers):
    '''
    f1 = (2 * precision * recall) / (precision + recall)
    '''
    # 计算真正例、预测正例、真实正例总数
    pred_counts = Counter(pred)
    answer_counts = Counter(answers)
    true_positive = sum(min(pred_counts[k], answer_counts[k]) for k in pred_counts)
    
    # 计算精确率和召回率,避免除以0的情况
    precision = true_positive / sum(pred_counts.values()) if sum(pred_counts.values()) > 0 else 0.0
    recall = true_positive / sum(answer_counts.values()) if sum(answer_counts.values()) > 0 else 0.0
    
    # 计算F1分数
    if precision + recall == 0:
        f1 = 0.0
    else:
        f1 = (2 * precision * recall) / (precision + recall)
    return f1

三、调用函数时别忘了传参数

最后,你在main.py里写的f_score()没有传参数,这个函数需要接收pred(预测结果)和answers(真实标签)两个参数,调用的时候得传入对应的序列,比如:

from .evaluation import f_score

# 示例调用,替换成你自己的真实数据
my_predictions = ["cat", "dog", "cat", "bird"]
my_ground_truth = ["cat", "dog", "dog", "bird"]
f1_result = f_score(my_predictions, my_ground_truth)
print(f"F1 Score: {f1_result}")

这样调整之后,不仅不会再出现NameError,你的f_score函数也能正常计算出正确的F1分数啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:31:04