Python 3.x 捕获yaml解析错误
我似乎无法让我的代码捕获错误: 我有一个yaml文件,有数千个条目,有几个条目被破坏,生成 我正在使用Pyyaml和python3Python 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
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之外,其他都可以正常工作。