unboundLocalError: local variable 'loopback' referenced before assignment

unboundLocalError: local variable 'loopback' referenced before assignment

我的代码如下:

import openpyxl
from openpyxl import load_workbook

def process(input="Input-Migration Table.xlsx", output_dir="\output"):

 dic_atn = {}
 for row in sheet2.iter_rows(min_col=3,min_row=2,max_col=3,max_row=17):
    for cel in row:
        dic_atn[cel.value] = ""

 for key in dic_atn:
    for i in range(3,6):
        if(sheet1.cell(row=i,column=1).value == key):
            loopback = sheet1.cell(row=i,column=2).value
            break

    for col_config in range(2,11):
     if(sheet3.cell(row=1,column=col_config).value == sheet2.cell(row=row,column=24).value + "-" + sheet2.cell(row=row,column=23).value):

     for i in range(3,78):
      if "<Loopback0>" in sheet3.cell(row=i,column=col_config).value:
       new_loopback = sheet3.cell(row=i, column=col_config).value.replace("<Loopback0>",loopback)

process()

我从google上搜索,说这个错误是使用函数外的变量引起的,但是在这里,变量"loopback"被定义并在函数过程中全部使用,为什么我仍然得到这个错误?

赋值前的错误引用表明变量在调用之前尚未创建。

在您的情况下,这是因为仅当一组特定语句为真时才定义变量。

for i in range(3,6):
        if(sheet1.cell(row=i,column=1).value == key):
            loopback = sheet1.cell(row=i,column=2).value
            break

如果您的 if 语句永远找不到匹配项,则永远不会将环回创建为变量。这会导致您在赋值之前获得错误引用,因为它从未被赋值过。

如果要确保变量始终具有引用,您可以在 if 语句之前单独定义变量,并使用默认值(或 none)。

loopback = ''

如果这不是解决您问题的可行方法,您将需要处理您的 if 语句以确保它在您每次 运行 应用程序时都匹配。