在assignmen之前引用的python UnboundLocalError

2024-10-05 12:34:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这似乎是一个常见的错误,但我没有看到我的案件的答案。在

UnboundLocalError: local variable 'tfstate_dict' referenced before assignment

#!/usr/bin/env python
import json


def main():
    get_sfleet_id()

def get_sfleet_id():
    try:
        f=open("terraform_remote.tfstate", "r")
        contents =f.read()
        tfstate_dict = json.load(contents)

    except:
        print("error loading %s" % f)
    print(contents)
    print(tfstate_dict)

if __name__ == '__main__': main()

Tags: 答案idjsongetmainlocaldef错误
1条回答
网友
1楼 · 发布于 2024-10-05 12:34:29

正如我在评论中所写的,tfstate_dict在退出try块之前不会存在。但这并不是说它适用于前面的所有代码;它只适用于tfstate_dict,因为它恰好是最后一行。在

这很容易用以下方法进行测试:

try:
    a = int(2)
    b = int(3)
    c = int('hi')
except:
    print(locals())
    print()
    print(locals().get('a'))

您应该看到'a'和{}都已定义并且可以访问(取决于您如何运行此代码,locals()中也可能有很多内容)。因此,'a'和{}的存在并不能保证{}的存在。在

当前异常处理有两个问题:

  1. 您的try块中可能有太多事情要按您当前的方式处理。如果找不到文件,此代码将失败,但您不一定知道发生了这种情况。如果您的代码最初只在tfstate_dict = json.load(contents)上失败,那么您现在就在绞尽脑汁,为什么突然在print(contents)上得到一个NameError。在
  2. 你不想用毯子except来捕捉这些问题。您至少需要使用except Exception as e:,这也允许您打印e。在

下面是一个假设的情况,您处理不存在的文件,并尝试解析JSON。在

^{pr2}$

相关问题 更多 >

    热门问题