在python中的赋值错误之前引用的变量[重复]
Posted
技术标签:
【中文标题】在python中的赋值错误之前引用的变量[重复]【英文标题】:variable referenced before assignment error in python [duplicate] 【发布时间】:2019-09-14 23:23:16 【问题描述】:在我的代码中,我正在测试用户是否拥有 AWS 访问密钥:
for response in paginator.paginate(UserName=user_name):
if len(response['AccessKeyMetadata']) and 'AccessKeyId' in response['AccessKeyMetadata'][0].keys():
key1 = response['AccessKeyMetadata'][0]['AccessKeyId']
稍后在我的代码中我会测试 key1 是否存在:
if key1:
print("\nAccess Key 1: ", key1)
else:
print("The user does not have any keys.")
如果用户根本没有键,则函数将失败并出现以下错误:
File ".\aws_iam_utils.py", line 1430, in rotate_access_keys
if key1:
UnboundLocalError: local variable 'key1' referenced before assignment
我是否在测试 key1 是否正确存在?为什么我得到一个未绑定的本地错误,而它应该只打印出 else 子句中的语句?
【问题讨论】:
minimal reproducible example。这是在不同的功能中吗? 不,这个错误发生在一个函数中。 对于if key:
,您不会询问变量key1
是否存在。您假设变量存在并询问它是否具有 truthy 值。
【参考方案1】:
您正在体验None
和null
或undefined
之间的区别。考虑三个卫生纸架。一个有很多,一个是内部纸板管,一个甚至没有管。或者换一种说法,一个有int
论文,一个有None
论文,一个是null
或undefined
。
如另一个答案中所述,在您的 if
语句之前将 key1
初始化为 None
以修复它。
key1 = None
检查变量是否存在:
if 'key1' in globals():
print(key1) # Or whatever
【讨论】:
【参考方案2】:您只需要在if
条件之前初始化key1
,即
key1 = None # <- You need this line
for response in paginator.paginate(UserName=user_name):
if len(response['AccessKeyMetadata']) and 'AccessKeyId' in response['AccessKeyMetadata'][0].keys():
key1 = response['AccessKeyMetadata'][0]['AccessKeyId']
这是因为如果 if
条件不满足,key1
将不会在您的原始代码中创建。
【讨论】:
好的,谢谢。是否可以测试变量是否存在?我该怎么做?【参考方案3】:if key1:
不测试key1
是否存在;它测试它是否包含“真实”值,并假设它确实存在。
【讨论】:
好的,谢谢。如何测试变量是否存在? 你最好不要。使其存在并将其设置为None
之类的值。
@bluethundr 您使用此答案***.com/a/843293/10553976 中的成语检查是否存在,我会将其添加到我的答案中以上是关于在python中的赋值错误之前引用的变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章