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

调用Python自定义数据打乱函数返回None,调整return位置无效如何解决

问题根因

你的函数返回异常的核心原因有3个:

  • 条件判断逻辑完全错误:你定义的is_nested_args是长度为3的列表,直接用if is_nested_args == True判断永远不成立,两个分支都不会进入,sorted_var不会被写入任何内容。如果你调整return位置时误删了函数末尾的return语句,函数执行完没有显式返回就会默认返回None。
  • return语句位置错误:你把return写在for循环内部,哪怕条件判断修复了,第一次循环执行完就会直接返回,不会处理剩余的参数。
  • 多处语法错误和不合理写法:
    1. 用到了inspect、numpy(代码中简写为np),但没有提前导入,运行直接报错
    2. range(np.array(eval(arg_data[i])).shape)中shape是元组,不能直接传给range,需要取对应维度的数值
    3. 用eval()读取参数的写法非常危险且冗余,完全可以直接把输入参数打包成列表处理,不需要用反射获取参数名再eval

修复后的代码

import random
import numpy as np

def _shuffle_variables(var, aux_var, label, technique):
    arg_list = [var, aux_var, label]
    sorted_var = []
    if technique == 'acoustic':
        is_nested_args = [True, False, False]
        # 生成打乱的索引
        if not is_nested_args[2]:
            idx_shuffled = list(range(len(label)))
            random.shuffle(idx_shuffled)
        else:
            idx_shuffled = list(range(np.array(label).shape[1]))
            random.shuffle(idx_shuffled)
        
        for i in range(len(arg_list)):
            current_arg = np.array(arg_list[i])
            if is_nested_args[i]:
                # 嵌套参数按索引打乱
                shuffle_result = []
                for k in range(current_arg.shape[0]):
                    sort_row = [current_arg[k][j] for j in idx_shuffled]
                    shuffle_result.append(sort_row)
                sorted_var.append(shuffle_result)
            else:
                # 非嵌套参数直接打乱
                sort_var = [current_arg[j] for j in idx_shuffled]
                sorted_var.append(sort_var)
    return sorted_var


# 测试代码
nested_list1 = [[random.random() for x in range(6249)] for x in range(6357)]
nested_list2 = [[random.random() for x in range(6249)] for x in range(6357)]
var = [random.random() for x in range(6249)]
label = [random.random() for x in range(6249)]

idx = _shuffle_variables([nested_list1, nested_list2], var, label, 'acoustic')

补充说明

如果需要返回你注释中提到的字典格式,只需要把最后返回的sorted_var换成对应构造的字典即可,不需要用反射获取参数名的冗余写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:27:02