如何在循环外访问局部变量?

时间:2019-06-20 20:39:23

标签: python python-3.x

我试图在for循环之外的for循环中的if语句内访问定义的变量。但我收到“无限制的本地错误”

我尝试按照此处的建议分配lambdaPriceUsWest2 = NonePython 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"

3 个答案:

答案 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'])