Python捕获异常时,如何获取行号?
我知道这个问题在其他地方也有人讨论过,但那并没有解决我的问题,请看我的问题!
简单来说,我正在解析一个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)