Troposphere中如何使用try/catch处理Sceptre场景下AWS::NoValue适配问题
问题原因
你收到Pylance告警的核心原因是:Python 中try...except属于语句,不是可返回值的表达式,不能直接放在赋值符号右侧、或者直接作为函数参数传入。
可行方案
方案1:提前计算参数值(保留try...except逻辑)
如果要保留try-except的错误捕获逻辑,可以先将参数值提前赋值给变量,再传入LifecycleRule构造函数:
# 提前计算ExpirationInDays的值 try: expiration_days = bucket['ExpirationInDays'] except KeyError: expiration_days = Ref("AWS::NoValue") LifecycleRule( Id="Xxxx", Status="Enabled", ExpirationInDays=expiration_days ),
这个方案完全不需要修改你原有模板的其他结构,仅调整参数赋值逻辑即可。
方案2:使用字典get方法(更简洁的推荐方案)
你当前的场景是捕获字典Key不存在的异常,完全可以用Python字典内置的get方法实现,一行代码即可完成,不需要额外写try-except块:
LifecycleRule( Id="Xxxx", Status="Enabled", ExpirationInDays=bucket.get('ExpirationInDays', Ref("AWS::NoValue")) ),
dict.get(key, default)逻辑和你原有的try-except完全等价:当key存在时返回对应值,不存在时返回你传入的default值,同时不会触发Pylance语法告警,代码更简洁符合Python惯用写法。
内容的提问来源于stack exchange,提问作者cosmos-1905-14
相关产品推荐
相关产品推荐

