0

Python と boto3 を使用して、OpsWorks スタックからカスタム json を取得しようとしています。名前の取得は問題ありませんが、CustomJson - KeyError を取得したい場合。理由はわかりません。

import boto3
import traceback

client = boto3.client('opsworks')

response = client.describe_stacks()

max_elements = len(response['Stacks'])

for i in range(max_elements):
    stack_Name = response['Stacks'][i]['Name']  # works

    try:
        stack_CustomJson = response['Stacks'][i]['CustomJson'] # KeyError
    except:
        traceback.print_exc()

それがコンソール出力です:

$ python3 get_custom_json.py
Traceback (most recent call last):
File "get_custom_json.py", line 27, in get_opsworks_details
stack_CustomJson = response['Stacks'][i]['CustomJson']
KeyError: 'CustomJson'

http://boto3.readthedocs.org/en/latest/reference/services/opsworks.html#OpsWorks.Client.describe_stacksからドキュメントを読むCustomJson がJSON オブジェクト。私はそれを変換する必要がありますか?

事前にThx

4

2 に答える 2

1

応答の要素はオプションであるKeyErrorため、時々取得しています。CustomStackスタックにカスタム スタックが指定されている場合は、それが返されます。そうしないと、CustomStackキーはまったく存在しません。次のようにする必要があります。

if 'CustomStack' in stack:
    # do your thing
于 2015-10-08T15:35:47.197 に答える
0

私の会社の開発者と簡単なチャットをしました。コーディングや python などを上達させるための基本的な紹介をいくつか受けました (私の管理者の思考の一部を失う必要があります)。

max_elements について反復しないでください。「stack in stacks」の上で反復することをお勧めします。

for stack in response['Stacks']:
    print(stack['CustomJson'])

これで動作します。OpsWorks スタックからカスタム json を取得します。しかし、まだ KeyError があります。

Traceback (most recent call last):
   File "get_custom_json.py", line 22, in <module>
      get_opsworks_details()
   File "get_custom_json.py", line 18, in get_opsworks_details
      print(stack['CustomJson'])
   KeyError: 'CustomJson'

もう一度彼を連れてきて、なぜそれが起こっているのかを確認します.

[編集] 盲点 - スタックにカスタム json がない場合、KeyError が発生します。

于 2015-10-08T10:41:58.783 に答える