2017-09-06 14 views
2

에서 작동하지 않습니다 이다YAML 1.2 지시어는 나는 다음과 같은 다중 파일 YAML 설정 파일을로드하기 위해 노력하고있어 안전하지 않은 모드

ruamel.yaml.parser.ParserError: found incompatible YAML document 
in "../MAML_tensorflow/experiment.yml", line 1, column 1 
,617,451 :

실행
from ruamel.yaml import YAML 

yaml = YAML(typ='unsafe') 
configs = yaml.load_all(Path(Experiment.config_file)) 
for config in configs: 
    print(config) 

, 그것은 다음과 같은 오류를 범

load_all을 모듈에서 직접 가져온 경우 파일이 작동합니다. 이 예상되는 동작입니까?

구현 플래그를 pure으로 설정하면 올바른 구문 분석 결과가 제공되므로 버그 일 가능성이 큽니다.

from ruamel.yaml import YAML 

yaml = YAML(typ='unsafe', pure=True) 
configs = yaml.load_all(Path(Experiment.config_file)) 
for config in configs: 
print(config) 

이 켜지지 않고이 아아,이다

from ruamel.yaml import YAML 

yaml = YAML(typ='unsafe') 
configs = yaml.load_all(Path(Experiment.config_file)) 
for config in configs: 
    print(config) 

답변

1

위의 오류, 예상되는 동작을 제공하는 동안. ruamel.yaml은 빠른 C 기반 로딩 및 덤핑을 위해 libyaml에 의존하는 PyYAML에서 파생됩니다. PyYAMLlibyaml은 모두 Kirill Simonov에 의해 개발되었습니다. 예를 들어, 가수에 소수점이없는 부동 소수점 숫자와 같은 1.2 가지가 있지만 (실제로는 YAML 1.1의 대부분을 구현하는 두 가지 "유일한"), PyYAMLlibyaml이 있습니다.

처음에는 과 연결되어 빠른 시간을 제공하지만, 원본 파일 사본을 가지고 있기 때문에 특히 Windows 버전의 Python에서는 휠 (.whl)을 쉽게 만들 수 있습니다.

ruamel.yaml의 현재 (0.15.33) 버전에 포함 된 C 소스는 libyaml의 코드에서 변경되지 않았습니다. 이것은 왕복 파서가 동등한 C/비 순수 버전을 가지고 있지 않은 이유와 안전/안전하지 않은/기본 로더의 순수 버전이 YAML 1.2를 받아들이는 이유와 비 순수 (C 기반) 버전이 아니.

물론 이것은 적절하게 문서화되어야하지만 C 코드는 라운드 트립을 지원하도록 조정되어야합니다. 라운드 트립을 위해 C 코드를 정밀 검사하는 동안 안전/안전하지 않은/기본로드를 위해 YAML 1.2를 지원하도록 조정됩니다.