【问题标题】:How to configure serverless.yml to read Python boolean values correctly?如何配置 serverless.yml 以正确读取 Python 布尔值?
【发布时间】:2019-03-09 11:44:56
【问题描述】:

我的 serverless.yml 文件如下所示:

environment:
IS_OFFLINE: False
DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage}
iamRoleStatements: ${file(config/iam.yml)}

但是,当我尝试评估 IS_OFFLINE 变量时,它会将其解析为字符串,从而使值真实,尽管它是使用 False 设置的

>>>> print(os.environ.get('IS_OFFLINE'))
'IS_OFFLINE': 'false'

如果可能的话,我宁愿避免这种类型的条件(在所有语言的 Python 中),如果有另一种配置 .yml 文件的方法。

if os.environ.get('IS_OFFLINE') == "true":

【问题讨论】:

  • 我遇到了同样的问题。你找到解决办法了吗?
  • @Peterhack 不,只是做了一个字符串检查。 Python 文字尚未在无服务器中很好地翻译。

标签: python-3.x serverless-framework


【解决方案1】:

在 2021 年,serverless.yml 中的 true/false 变量仍会转换为 Python 中的 'true'/'false' 字符串。 您可以使用distutils.util 中的strtobool 安全地解析它们:

from distutils.util import strtobool

if strtobool(environ.get("MY_VAR")):

这比字符串比较更简洁,适用于许多真/假同义词,例如是/否、1/0、开/关。见https://docs.python.org/3/distutils/apiref.html#distutils.util.strtobool

未定义的变量将评估为False

from distutils.util import strtobool

if strtobool(environ.get("MY_UNDEFINED_VAR")):
    # this will NOT be executed
    print('var is undefined')

【讨论】:

    猜你喜欢
    • 2017-10-10
    • 2018-06-30
    • 1970-01-01
    • 2022-10-13
    • 2021-09-14
    • 2021-11-26
    • 1970-01-01
    • 2017-06-30
    • 2012-08-02
    相关资源
    最近更新 更多