我发现这似乎是一个常见的错误,但我没有看到我的答案。
UnboundLocalError:分配前引用的局部变量“
tfstate_dict
”
#!/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()
答案 0 :(得分:2)
正如我在评论中所写,tfstate_dict
在您退出try
区块之前不会存在。但这并不是说它适用于所有前面的代码;它只适用于tfstate_dict
,因为它恰好是最后一行。
使用以下内容可以轻松测试:
try:
a = int(2)
b = int(3)
c = int('hi')
except:
print(locals())
print()
print(locals().get('a'))
您应该看到'a'
和'b'
都已定义且可以访问(取决于您运行此代码的方式,locals()
中可能还有很多内容) 。因此,'a'
和'b'
的存在不能保证'c'
存在。
您当前的异常处理存在两个问题:
try
区块可能会按照您目前的方式进行处理。如果无法找到该文件,此代码将失败,但您不一定知道发生了这种情况。如果您的代码最初只在tfstate_dict = json.load(contents)
上失败,那么您现在正在为什么突然在NameError
print(contents)
突然发现except
。except Exception as e:
来解决这些问题。至少您需要使用e
,这样您也可以打印import json
from json.decoder import JSONDecodeError
try:
with open('something.json') as infile:
try:
#data = json.load(infile) # This is what you'd really use
data = json.loads("{hi: 2}") # But let's make it fail
except JSONDecodeError:
print("Not valid JSON, try something else")
data = infile.read()
except FileNotFoundError:
print("Can't find file")
data = ''
。 这是一个假设情况,您处理的文件不存在,您还可以解析JSON。
export class SecureComponent implements OnInit {
public _isLoading: boolean;
on(eventName, callback) {
this.observable.filter((event) => {
this._isLoading = event.isLoading; //set "_isLoading" but It isn't change value in template.
console.log(this._isLoading);
return event.name === eventName;
}).subscribe(callback);
}
ChangeIsLoading(isLoading){
this._isLoading = !isLoading; // I try to change value in function. it work very well
}
}