Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 捕获yaml解析错误_Python 3.x_Exception_Pyyaml - Fatal编程技术网

Python 3.x 捕获yaml解析错误

Python 3.x 捕获yaml解析错误,python-3.x,exception,pyyaml,Python 3.x,Exception,Pyyaml,我似乎无法让我的代码捕获错误: 我有一个yaml文件,有数千个条目,有几个条目被破坏,生成 我正在使用Pyyaml和python3 with open('yamlfile') as yf: allyml = yaml.load_all(yf) for listing in allyml: try: <do stuff> #except yaml.parser.ParserError: except

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

我有一个yaml文件,有数千个条目,有几个条目被破坏,生成

我正在使用Pyyaml和python3

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语句…

执行以下操作:

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错误,并显示错误的准确行号和列。

执行以下操作:

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错误,并显示错误的准确行号和列。

无效。Pyaml已经告诉了我错误的位置——尽管我有太多的yaml条目,所以我只想跳过该yaml条目并继续下一个,而不是修复yaml语法不起作用的地方。Pyyaml已经告诉我了错误的位置——尽管我有太多的yaml条目,所以我只想跳过该yaml条目并继续下一个,而不是修复yaml语法,并且except块应该位于调用yaml.load_all的行附近。完成后,except yaml.parser.parserrror应该可以正常工作。try和except块应该位于调用yaml.load_all的行附近。完成此操作后,除了yaml.parser.parserrror之外,其他都可以正常工作。