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

Python运行函数报NameError: final_error_code未定义如何解决

问题产生原因
  • 变量赋值位置存在逻辑漏洞:final_error_code的赋值语句写在两层嵌套循环的最内层,只有当外层文件遍历循环执行、且内层正则匹配到PT-内容时,这个变量才会被创建。如果files列表为空、或者所有文件内容都没有匹配到目标字符串,两层循环都不会进入赋值逻辑,执行到循环外的打印、返回语句时,final_error_code根本没有被定义,就会触发NameError。
  • 注释掉的global final_error_code无法解决问题:全局声明只是指定变量的作用域来源,不会自动给变量赋初始值。如果没有任何代码执行过给final_error_code赋值的操作,哪怕声明了全局变量,访问时依然会报未定义错误。
  • 附带的逻辑bug:代码中打开文件用了w+模式,该模式会在打开文件时直接清空原有文件内容,后续readlines()根本读不到原文件的真实数据,大概率会导致正则完全匹配不到结果,进一步触发变量未定义的问题。
修复方案
  • 在函数内部、进入循环前提前初始化final_error_code变量,保证无论循环是否执行、是否匹配到结果,变量都有合法的初始值,不需要使用全局变量。
  • 将文件打开模式从w+改为r只读模式,避免打开文件时清空原内容。
  • 优化冗余逻辑:原代码每次匹配到一个结果就重新生成整个final_error_code列表属于不必要的性能损耗,可以把列表生成逻辑挪到所有遍历、匹配操作完成后再执行。
  • 增加索引边界判断,避免匹配到的PT-位于字符串末尾时触发索引越界错误。

修复后的完整代码如下:

import re
import json

def get_error_code_array():
    array_pt_failed_current = []
    # 提前初始化目标变量
    final_error_code = []
    for file_path in files:
        # 读文件使用r只读模式,指定编码避免乱码
        with open(file_path, 'r', encoding='utf-8') as f:
            lines = f.readlines()
            error_str = json.dumps(lines)
            print("This is get error code of ", error_str)
            for pt_found in re.finditer(r'PT-', error_str):
                start_idx = pt_found.end()
                # 边界判断,防止索引超出字符串长度
                if start_idx + 2 >= len(error_str):
                    continue
                # 提取PT-后的三位错误码
                pt_failed_current = error_str[start_idx] + error_str[start_idx+1] + error_str[start_idx+2]
                array_pt_failed_current.append(pt_failed_current)
    # 所有匹配完成后统一生成最终错误码列表
    final_error_code = [f"PT-{code}" for code in array_pt_failed_current]
    print("Lemon Squeeze", final_error_code)
    return final_error_code

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:09:26