Есть ли в любом случае возможность использовать try/catch в тропосфере?

#python #amazon-cloudformation #troposphere #sceptre

Вопрос:

Я использую пользовательские данные sceptre и не могу использовать с ними AWS::NoValue. Поскольку я не хочу сильно изменять текущий шаблон, я хочу сделать обходной путь, но я вижу предупреждение в строке «Попытка», которое есть Expected expression Pylance . Как я могу использовать try catch в этом случае? Если я не могу, есть ли какой-нибудь обходной путь?

                 LifecycleRule(
                    Id="Xxxx",
                    Status="Enabled",
                    ExpirationInDays=
                        try:
                            bucket['ExpirationInDays'] 
                        except KeyError: Ref("AWS::NoValue")
                ),
            ]),
 

Ответ №1:

Будет ли этот фрагмент работать для вас:

 LifecycleRule(Id="Xxxx", Status="Enabled",
ExpirationInDays=bucket.get('ExpirationInDays', Ref('AWS::NoValue'))
 

Я предполагаю, что bucket-это словарь Python. Использование функции get() словаря, подобной этой, позволяет избежать необходимости в конструкции try/except

Комментарии:

1. Я получил эту ошибку.=: ` Файл «/usr/src/app/xxxx/s3.py», строка 104, в create_s3_bucket ExpirationInDays= ошибка ключа bucket[‘ExpirationInDays’]: «ExpirationInDays» На самом деле этот словарь создается скипетром. И есть некоторые ключи, в которых нет ExpirationInDays переменной, поэтому я хочу заменить ее Ref('AWS::NoValue') в этом случае. Это док для скипетра

2. Код, который я предложил, не вызовет исключения ошибки ключа. В этом весь смысл использования функции get() со значением по умолчанию

3. Извините за ложную тревогу, файл не был сохранен. 🙂 Большое спасибо!