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

模块化name_2_sex函数时触发NameError错误求助

解决NameError: free variable 'gender_list' referenced before assignment问题

这个错误的核心原因是:name_2_sex函数尝试访问的gender_list变量,在模块化后的函数作用域中未被定义。未模块化时它可能是全局变量,拆分到独立模块后,函数无法再直接访问这个外部变量。

以下是几种可行的修正方案:

方案1:将gender_list定义在函数内部

如果gender_list是固定的性别映射规则,直接把它初始化在函数内部,确保函数的独立性:

# 模块文件(比如gender_processor.py)
import pandas as pd

def name_2_sex(df):
    # 直接在函数内定义性别映射表
    gender_list = {
        "张三": "男",
        "李四": "女",
        # 其他映射规则
    }
    df['sex'] = df['name'].map(gender_list)
    return df

在test.py中调用:

import pandas as pd
from gender_processor import name_2_sex

test_df = pd.DataFrame({"name": ["张三", "李四"]})
result_df = name_2_sex(test_df)

方案2:将gender_list设为模块级变量

如果gender_list需要在模块内多个函数间复用,可以把它定义为模块级变量,函数内部直接引用:

# 模块文件(gender_processor.py)
import pandas as pd

# 模块级别的性别映射表
gender_list = {
    "张三": "男",
    "李四": "女",
    # 其他映射规则
}

def name_2_sex(df):
    df['sex'] = df['name'].map(gender_list)
    return df

方案3:将gender_list作为函数参数传入

如果gender_list需要根据调用场景动态调整,把它作为参数传入函数:

# 模块文件(gender_processor.py)
import pandas as pd

def name_2_sex(df, gender_list):
    df['sex'] = df['name'].map(gender_list)
    return df

在test.py中调用:

import pandas as pd
from gender_processor import name_2_sex

# 自定义性别映射表
custom_gender_list = {
    "张三": "男",
    "李四": "女"
}
test_df = pd.DataFrame({"name": ["张三", "李四"]})
result_df = name_2_sex(test_df, custom_gender_list)

补充:如果gender_list来自外部文件

如果性别映射数据存储在外部文件(如CSV),可以在函数内部加载该文件,或者在模块初始化时加载:

# 模块文件(gender_processor.py)
import pandas as pd

def name_2_sex(df):
    # 从外部CSV加载性别映射表
    gender_df = pd.read_csv("gender_mapping.csv")
    gender_list = dict(zip(gender_df["name"], gender_df["sex"]))
    df['sex'] = df['name'].map(gender_list)
    return df

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:50:26