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

Python报错local-variable-data-referenced-before-assignment:data_summary未赋值先引用

问题解决:local variable 'data_summary' referenced before assignment

错误原因

核心问题是:变量仅在try块内部赋值,若try块代码抛出异常,变量就不会被初始化,后续代码引用时就会触发"未赋值即引用"的错误。另外你开头的变量列表只是罗列名称,并没有实际完成初始化,Python不会将这种写法视为变量定义。

修复方案

1. 提前给所有变量赋对应默认值

根据变量类型(数字、DataFrame、None等),在所有try块之前完成变量初始化,确保无论try块是否执行成功,变量都有合法定义。示例代码如下:

# 按变量类型初始化默认值
data_summary = None
spdj_count = 0
mstar_count = 0
fs_count = 0
dataframe_ricToMstarId = None
ricMissingPerformanceIds = 0
dataframe_total_cases_count = 0
dataframe_soi1_case_count = 0
dataframe_soi_2_case_count = 0
dataframe_soi_3_case_count = 0
totalperfIdBoB = 0
dataframe_treasury_check = 0
treasuryEmailSummary = None
dataframe_fs_mapping_error = None
fsMissingPerformanceIds = 0
totalBoBperfIds = 0

try:
    data_summary, spdj_count, mstar_count, fs_count = app.compare_floats(env, running_locally, region)
except Exception as exp:
    print(f"Error while executing Report-- execute_compare_price - CE_API_Weekly -- Message -- {str(exp)}")
    # 可选:异常场景下重置变量为默认值
    spdj_count = 0
    mstar_count = 0
    fs_count = 0

try:
    dataframe_ricToMstarId, ricMissingPerformanceIds, dataframe_total_cases_count, dataframe_soi1_case_count, dataframe_soi_2_case_count, dataframe_soi_3_case_count, totalperfIdBoB = app.getMissingRICPerformanceIDsReportDetails(
        env, running_locally, region)
except Exception as exp:
    print(f"Error while executing Report-- execute_compare_price - CE_API_Weekly -- Message -- {str(exp)}")
    ricMissingPerformanceIds = 0
    dataframe_total_cases_count = 0

# 后续try-except块同理处理

# 修复原if判断的语法逻辑错误
if (dataframe_treasury_check > 0 
    or (ricMissingPerformanceIds > 0 and dataframe_ricToMstarId is not None)
    or (fsMissingPerformanceIds > 0 and dataframe_fs_mapping_error is not None)
    or (spdj_count > 0 or mstar_count > 0 or fs_count > 0)):

    ricToMstarMappingEmailSummary = reporting.printRICMissingPerformanceIDReportEmailSummary(
        dataframe_total_cases_count,
        dataframe_soi1_case_count,
        dataframe_soi_2_case_count,
        dataframe_soi_3_case_count,
        # 补充完整缺失的参数
    )

2. 关键注意事项

  • 默认值匹配变量类型:计数类变量(如spdj_count)默认设为0,DataFrame或复杂对象默认设为None,后续使用时要先检查是否为None再操作。
  • 修正逻辑判断语法:原代码中(ricMissingPerformanceIds > 0 and dataframe_ricToMstarId) > 0属于无效写法,需拆分条件分别判断。
  • 异常块可选重置变量:如果需要保证异常场景下变量状态合法,可以在except块内重新赋值默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:20:29