Воздушный поток: установите значение по умолчанию в коде, если переменная не существует без исключения

У меня небольшая проблема, я хочу сделать типичное условное выражение, например

setting_x  = Variable.get('setting_x')
variable = setting_x if setting_x else 0

Но поскольку модель Airflow выдает исключение, когда ключ не существует, невозможно сделать это без trycatching, и это не очень круто.

Есть ли какое-то решение, которое мне не хватает, чтобы решить этот случай? Я, конечно, поискал по всему Интернету, но пока не нашел решения.

Спасибо, ангел


person skozz    schedule 14.06.2018    source источник


Ответы (1)


Вы можете установить значение по умолчанию для переменной, если она не существует, когда вы получаете ее с помощью метода get.

variable = Variable.get('setting_x', default_var=0)

https://github.com/apache/airflow/blob/master/airflow/models/variable.py#L127

person Ben Gregory    schedule 14.06.2018
comment
Привет! Спасибо! он работает, поэтому я отмечу его как решенный, но у меня примерно такая же проблема, поскольку значение должно быть всегда! = Нет. Скажем еще один пример: - person skozz; 18.06.2018
comment
slack_channel = Variable.get ('SLACK_CHANNEL', default_var = None) slack_channel = slack_channel if slack_channel else os.environ ['SLACK_CHANNEL'] - person skozz; 18.06.2018
comment
В этом случае он по-прежнему генерирует исключение, что является небольшим ограничением, поскольку мы не можем управлять возможным значением None без trycatching, вам так не кажется? Python не является моим основным языком, поэтому, вероятно, я что-то упускаю, но мне странно, что я не могу управлять возможным значением None в модели - person skozz; 18.06.2018
comment
slack_channel = slack_channel if slack_channel else os.environ['SLACK_CHANNEL'] должен работать, если ваша SLACK_CHANNEL переменная среды также не имеет значения None. Если у вас никогда не может быть None и есть вероятность, что env SLACK_CHANNEL также None, я бы добавил проверку в конце, чтобы убедиться, что это что-то еще - if not slack_channel: slack_channel = 'DOES NOT EXIST' - person Ben Gregory; 18.06.2018
comment
Есть ли способ сделать это с помощью шаблона Jinja? {{ var.value.setting_x or 0 }} выдаст ошибку, если переменная setting_x не существует. - person yegeniy; 14.05.2019