我试图在for循环之外的for循环中的if语句内访问定义的变量。但我收到“无限制的本地错误”
我尝试按照此处的建议分配lambdaPriceUsWest2 = None
:
Python Get variable outside the loop
此外,尝试在代码段之前的global lambdaPriceUsWest2
的if语句中指定lambdaPriceUsWest2 = None
。
for x in range(len(response['PriceList'])):
priceList=json.loads(response['PriceList'][x])
if priceList['product']['sku'] == 'DU9X9ZR8C8DYH3Y9':
lambdaPriceUsWest2= priceListpriceList['product']['sku']['USD']
if priceList['product']['sku'] == 'CVE47QZ9RSF8DTEM':
lambdaPriceUsEast2= priceListpriceList['product']['sku']['USD']
break
logger.debug(lambdaPriceUsWest2)
预期结果: 0.055512(相似值)
实际结果: 错误:
"errorMessage": "local variable 'lambdaPriceUsWest2' referenced before assignment",
"errorType": "UnboundLocalError"
答案 0 :(得分:3)
最好的方法是在for循环尝试初始化该变量之前。例如:
lambdaPriceUsWest2 = ""
答案 1 :(得分:0)
只需定义一个var外循环并更新其值
local_val =''
for x in range(len(response['PriceList'])):
priceList=json.loads(response['PriceList'][x])
if priceList['product']['sku'] == 'DU9X9ZR8C8DYH3Y9':
lambdaPriceUsWest2= priceListpriceList['product']['sku']['USD']
local_val = lambdaPriceUsWest2
if priceList['product']['sku'] == 'CVE47QZ9RSF8DTEM':
lambdaPriceUsEast2= priceListpriceList['product']['sku']['USD']
break
logger.debug(local_val)
答案 2 :(得分:0)
首先,使用“全局”语法在赋值之前(在for循环内)声明一个变量:
global lambdaPriceUsEast2
然后为其分配所需的任何值,例如:
lambdaPriceUsEast2 = priceListpriceList['product']['sku']['USD']
值得一提的是,如果您不将其分配给任何值,则在循环外仍将其未定义。因为python中的函数是对对象的引用。为了避免这种情况,您可以在任何条件之前将其分配为None:
global lambdaPriceUsEast2
lambdaPriceUsEast2 = None
这将完成工作。您还可以使用内置的globals()函数检查所有全局变量。
但是使用全局语句仍然不是最佳实践。我建议您编写一个函数并返回如下值:
def get_price(price_list):
for x in range(len(price_list)):
priceList=json.loads(price_list[x])
if priceList['product']['sku'] == 'DU9X9ZR8C8DYH3Y9':
return priceListpriceList['product']['sku']['USD']
if priceList['product']['sku'] == 'CVE47QZ9RSF8DTEM':
return priceListpriceList['product']['sku']['USD']
return None
value = get_price(response ['PriceList'])