【问题标题】:Catching yaml parse error捕获 yaml 解析错误
【发布时间】:2016-10-26 19:16:50
【问题描述】:

我似乎无法让我的代码捕获错误:

我有一个包含数千个条目的 yaml 文件,其中一些条目被破坏,从而生成

"expected <block end>, but found %r" % token.id, token.start_mark)
yaml.parser.ParserError: while parsing a block mapping

我在 python3 中使用 Pyyaml

with open('yamlfile') as yf:
    allyml = yaml.load_all(yf)
    for listing in allyml:
        try:
            <do stuff>
        #except yaml.parser.ParserError:
        except:
            continue 

捕捉 ParserError 不起作用,也只是一个例外。

它工作正常,直到它到达损坏的 yaml 条目。

由于 PYyaml 抛出 ParserError 它一定是我的 try 语句...

【问题讨论】:

  • tryexcept 块应该在调用 yaml.load_all 的行周围。完成后,except yaml.parser.ParserError 应该可以正常工作了。

标签: python-3.x exception pyyaml


【解决方案1】:

做:

with open('yamlfile') as yf:
    allyml = yaml.load_all(yf)
    for listing in allyml:
        try:
            <do stuff>
        # Catch all YAMLErrors
        except yaml.YAMLError, exc:
           # print line number of error
           if hasattr(exc, 'problem_mark'):
              mark = exc.problem_mark
              print "Error position: (%s:%s)" % (mark.line+1, mark.column+1)
           continue 

而不是:

with open('yamlfile') as yf:
    allyml = yaml.load_all(yf)
    for listing in allyml:
        try:
            <do stuff>
        #except yaml.parser.ParserError:
        except:
            continue 

这将允许您捕获所有 YAML 错误并显示错误的确切行号和列。

【讨论】:

  • 没用。 Pyyaml 已经告诉我错误的位置 - 我有很多 yaml 条目,我想简单地跳过那个 YAML 条目并继续下一个(而不是修复 YAML 语法)
猜你喜欢
  • 1970-01-01
  • 2022-01-18
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 2011-06-26
  • 1970-01-01
相关资源
最近更新 更多