Python捕获异常时,如何获取行号?

3 投票
2 回答
2458 浏览
提问于 2025-04-16 19:57

我知道这个问题在其他地方也有人讨论过,但那并没有解决我的问题,请看我的问题!

简单来说,我正在解析一个YAML文件,以确保里面有我想要的所有正确的键和值。如果这个YAML文件里有不正确的值或键,我想打印一条消息,告诉我哪里出错了。

举个例子:
假设这个YAML文件是这样的:

购物清单:
苹果:格兰尼
牛奶:脱脂
面包:小麦

假设我期待牛奶的值是'全脂'。如果这一行是第3行,我该怎么打印一条消息,告诉我“错误:第3行的值无效”呢?

非常感谢!

2 个回答

0

我遇到过类似的问题。我找不到用Python解决的办法,但发现了一个叫kwalify的工具 - http://www.kuwata-lab.com/kwalify。这个工具可以在命令行中使用。它让你可以定义一些键和允许的值,形成一个规则(也就是模式)。然后你可以用这个规则来检查你的YAML文件,方法如下:

kwalify -f schema.yaml document.yaml

5

来自PyYaml的文档

>>> try:
...     yaml.load("unbalanced blackets: ][")
... except yaml.YAMLError, exc:
...     if hasattr(exc, 'problem_mark'):
...         mark = exc.problem_mark
...         print "Error position: (%s:%s)" % (mark.line+1, mark.column+1)

Error position: (1:22)

撰写回答