Это не сработает без создания модифицированного загрузчика, альтернативы eval
и / или переписывания вашего YAML.
Если вы попытаетесь загрузить, сбросьте это:
c: [ 5 * 32]
вы увидите, что скаляр без кавычек эквивалентен:
c: ['5 * 32']
, поэтому ваш вызов eval получает в качестве аргумента список из одной строки.
Ваш YAML долженбыть действительным, а ваше - нет, поэтому ваша программа никогда не вызовет eval во второй раз. Синтаксический анализ [ *a_num * *a_num]
завершается неудачно, поскольку *
в начале этого узла не позволяет анализировать скаляр без кавычек, поскольку вместо этого он распознается как псевдоним. Псевдоним анализируется (до пробела после a_num
), а затем синтаксический анализатор ожидает запятую для следующего элемента списка или закрывающий ]
. Он пытается снова проанализировать псевдоним, и если бы он мог, он все равно жаловался бы на запятую (попробуйте использовать [ *a_num *a_num]
, чтобы увидеть этот эффект, вы никогда не достигнете вызова eval
).
Итаквам придется либо прибегнуть к собственной альтернативе eval, которая знает, как обрабатывать последовательность элементов ([*a_num, '*', *a_num]
) в качестве аргумента (так как это должен быть допустимый YAML), либо в качестве альтернативы у вас есть такой альтернативный доступ к механизму привязки / псевдонимаи представить его с [ '*a_num * *a_num' ]
.