Если вам нужно разобрать YAML 1.2, для чего вам понадобится мой ruamel.yaml. на самом деле вы также можете сдать pathlib.Path
, и он будет правильно открыт для вас.
Принимая во внимание, что тест для строки / юникода является явным как в PyYAML (для YAML 1.1), так и в ruamel.yaml (YAML 1.2 и 1.1) с использованием isinstance()
. Тест для Path
выполняется по-другому, так как модуль pathlib
по умолчанию недоступен в Python 2 (хотя вы можете установить pathlib2
и импортировать Path
оттуда). Поэтому, если бы вы сделали isinstance(arg, Path)
, вам нужно было бы перехватить возможное исключение.
Вместо метода ruamel.yaml load()
, проверяется, что аргумент не имеет метода .read()
и имеет *Метод 1014 *, в этом случае он принимает аргумент Path
, открывает его и вызывает сам себя:
def load(self, stream):
if not hasattr(stream, 'read') and hasattr(stream, 'open'):
# pathlib.Path() instance
with stream.open('rb') as fp:
return self.load(fp)
# processing of string/unicode/opened_file
Таким образом, нигде в коде pathlib
фактически не импортировано.