python中赋值错误之前引用的变量

时间:2019-04-25 13:45:33

标签: python

在我的代码中,我正在测试用户是否具有AWS访问密钥:

undefined

稍后在我的代码中,我测试key1是否存在:

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:
    print("\nAccess Key 1: ", key1)
else:
    print("The user does not have any keys.")

我是否正在测试key1是否正确存在?为什么应该在else子句中打印出语句时出现未绑定的本地错误?

3 个答案:

答案 0 :(得分:2)

您只需要在key1条件之前初始化if,即

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

答案 1 :(得分:1)

if key1:不测试key1是否存在;它会测试它是否包含“真实的”值,并假定它确实存在

答案 2 :(得分:1)

您正在遇到Nonenullundefined之间的差异。考虑三个卫生纸架。一个有很多,一个在内部硬纸板管子里,另一个甚至没有管子。或者换种说法,一个人有int个论文,一个人有None个论文,一个人是nullundefined

如另一个答案中所述,在key1语句之前将None初始化为if

key1 = None

要检查变量是否存在:

if 'key1' in globals():
    print(key1) # Or whatever