Python 库似乎pyyaml
不允许我读取多文档 YAML 流并继续超过解析错误点。我有两个相关的问题:
以下是多文档 YAML 流的示例:
%YAML 1.1
---
# YAML can contain comments like this
name: David
age: 55
---
name: Mei
age: 50 # Including end-of-line
---
name: Juana: ERROR
age: 47
...
---
name: Adebayo
age: 58
...
我希望与此类似的代码跳过错误的文档,但要弄清楚“无论这个文档有多糟糕,在...
和之后都会有新的东西开始---
。
with open('data/multidoc-bad.yaml') as stream:
docs = yaml.load_all(stream)
while True:
try:
doc = next(docs)
print(doc)
except StopIteration:
break
except Exception as err:
print(err)
我想得到:
{'name': 'David', 'age': 55}
{'name': 'Mei', 'age': 50}
mapping values are not allowed here
in "data/multidoc-bad.yaml", line 10, column 12
{'name': 'Adebayo', 'age': 58}
但实际上我没有听懂“阿德巴约”的最后一句。
我承认,我可以写一个小解析器自己,读取行,只查找...
和---
线块流。然后yaml.loads()
在我自己的解析之后只传递单个文档。但看起来这确实是解析器应该为我做的事情。
我是否只是遗漏了一些东西,而其他一些 API 会支持这一点?
不,PyYAML 不能这样做。
其他编程语言的解析器是否支持这种操作?(如果是,是哪个)
我所知道的都没有。大多数 YAML 解析器都是手写的,其中相当一部分是从 PyYAML 翻译而来的。我不知道一个实现错误恢复的。(我使用过 SnakeYAML、go-yaml、PyYAML、libyaml、YamlDotNet,并编写了 NimYAML 和 AdaYaml。)
但看起来这确实是解析器应该为我做的事情。
我认为解析器不支持的原因包括
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句