#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. Извините за ложную тревогу, файл не был сохранен. 🙂 Большое спасибо!