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 语句以确保它在您每次 运行 应用程序时都匹配。
我的代码如下:
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 语句以确保它在您每次 运行 应用程序时都匹配。