在字典中添加密钥之前,如何使用循环?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在字典中添加密钥之前,如何使用循环?相关的知识,希望对你有一定的参考价值。
我使用Django作为框架。我正在使用boto3在我的views函数中创建一个AWS账户。每个创建的aws帐户都有一个AccountId。在进一步细节之前,这是我的片段:
org = boto3.client('organizations')
acc = org.create_account(
Email=email,
AccountName=lab_name,
IamUserAccessToBilling='ALLOW'
)
cid = acc['CreateAccountStatus']['Id']
time.sleep(70)
#GET ACCOUNT DETAILS
status = org.describe_create_account_status(
CreateAccountRequestId=cid
)
accid = status['CreateAccountStatus']['AccountId']
最初我正在创建帐户。就像我之前提到的那样,创建账户需要一些时间(大约1到1.5分钟)。然后我需要获取帐户详细信息,其中一个细节是AccountId。我尝试增加睡眠时间来解决这个问题,但这没有帮助。当我尝试在'accid'声明行中获取AccountId值时,我收到错误。我得到的错误是:
KeyError:AccountId不存在
这可能是因为帐户尚未创建,并且在该事件之前我的代码正在尝试获取AccountId值。我怎样才能获得AccountId值?我应该尝试将它放在循环中或使用try和except块来避免错误消息吗?请帮忙。提前致谢。
status = org.describe_create_account_status(CreateAccountRequestId=cid)
while status.get('CreateAccountStatus',{}).get('AccountId',None) is None:
# sleep here
status = org.describe_create_account_status(CreateAccountRequestId=cid)
accid = status['CreateAccountStatus']['AccountId']
这将使用.get(key, default)
的dict
为dict
提供它(或空'CreateAccountStatus'
)和None
和'AccountId'
的None
。
正如JonClements所指出的那样,使用while True: ... break ...
构造可能更加pythonic:
while True:
status = org.describe_create_account_status(CreateAccountRequestId=cid)
try:
accid = status['CreateAccountStatus']['AccountId']
break
except KeyError:
time.sleep(30)
这避免了status = ...
线的重复,并使流动更加清晰。
使用try: ... except:
更适合pythonic ask-forgiveness-not-permission方法。
在你的acc['CreateAccountStatus']
变量中,你应该有一个关键状态,告诉你创建完成的时间。
这是documentation,请参阅响应语法
以上是关于在字典中添加密钥之前,如何使用循环?的主要内容,如果未能解决你的问题,请参考以下文章