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

为什么被Hydra装饰器修饰的函数会返回None类型?

问题原因

你遇到的返回None是Hydra 1.x版本@hydra.main装饰器的固有设计:该版本的装饰器默认不会透传被修饰函数的返回值,无论你在函数内部return什么内容,装饰器外层最终都会返回None。去掉装饰器后函数直接执行,自然能正常返回你定义的结果。

适配你当前版本(hydra-core 1.1.1)的解决方案

方案1:改用Hydra Compose API获取配置(推荐)

不使用@hydra.main装饰器,改用显式的compose接口加载配置,就能正常调用函数拿到返回值,代码示例如下:

import hydra
from omegaconf import DictConfig, OmegaConf
import sys
import random
import os
from hydra import compose, initialize

input_data_path = "path/to/input/data"

def get_number_from_sentences(cfg: DictConfig):
    n_sentences = cfg.n_sentences
    list_results = []
    with open(input_data_path, 'r') as input_data_file:
        input_data = input_data_file.readlines()
        for i in range(0, len(input_data), n_sentences):
            result = 0
            for sentence in input_data[i:i+n_sentences]:
                for word in sentence:
                    result = result + random.randint(0, 100)
            result = result/(n_sentences*100)
            list_results.append(result)
    return list_results

if __name__ == "__main__":
    # 显式加载配置
    with initialize(version_base=None, config_path="conf"):
        cfg = compose(config_name="default")
        print(get_number_from_sentences(cfg))

方案2:用全局变量存储结果

如果你不想调整现有函数的结构,可以把结果存储到全局变量里再读取,示例如下:

import hydra
from omegaconf import DictConfig, OmegaConf
import sys
import random
import os

input_data_path = "path/to/input/data"
results = []

@hydra.main(config_path='conf', config_name='default')
def get_number_from_sentences(cfg):
    global results
    n_sentences = cfg.n_sentences
    list_results = []
    with open(input_data_path, 'r') as input_data_file:
        input_data = input_data_file.readlines()
        for i in range(0, len(input_data), n_sentences):
            result = 0
            for sentence in input_data[i:i+n_sentences]:
                for word in sentence:
                    result = result + random.randint(0, 100)
            result = result/(n_sentences*100)
            list_results.append(result)
    results = list_results

get_number_from_sentences()
print(results)

升级版本后的解决方案

如果可以升级hydra-core到1.2.0及以上版本,只需要给@hydra.main装饰器添加return_value=True参数即可直接获取返回值,示例如下:

@hydra.main(config_path='conf', config_name='default', return_value=True)
def get_number_from_sentences(cfg):
    # 原有逻辑不变
    return list_results

print(get_number_from_sentences())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:48:03