2016-06-24 21 views
2
私は自分のコードキャッチエラー作るように見えることはできません

パースエラー:私は「キャッチYAML

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

を生成し、私はエントリの何千ものYAMLファイルを持っている

は、いくつかのエントリが台無しにされていますpythonとPythonを併用しています。

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

catching ParserErrorは機能しません。

マングルされたyamlエントリになるまでうまく動作します。

PyYAMLとはParserErrorを投げているので、それは私のtry文でなければなりません...

答えて

-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をキャッチすることができますエラーの正確な行番号と列を表示します。

+0

動作しませんでした。 Pyyamlはすでにエラーの位置を教えていました - 私は非常に多くのyamlエントリを持っていますが、YAMLエントリをスキップしてYAML構文を修正するのではなく、 –