В pyyaml SafeLoader не включает загрузчик для собственных типов Python, а только типы, определенные в спецификации yaml.Вы можете увидеть типы для SafeLoader
и Loader
здесь в примере взаимодействия ниже.
Вы можете определить новый класс Loader, который добавляет в кортеж python, но не другие типы, поэтому он долженвсе еще быть довольно безопасным:
import yaml
class PrettySafeLoader(yaml.SafeLoader):
def construct_python_tuple(self, node):
return tuple(self.construct_sequence(node))
PrettySafeLoader.add_constructor(
u'tag:yaml.org,2002:python/tuple',
PrettySafeLoader.construct_python_tuple)
doc = yaml.dump(tuple("foo bar baaz".split()))
print repr(doc)
thing = yaml.load(doc, Loader=PrettySafeLoader)
print thing
, что приводит к:
'!!python/tuple [foo, bar, baaz]\n'
('foo', 'bar', 'baaz')
Ниже приведены конструкторы, связанные с классами SafeLoader и Loader.