将编译器错误输出到python中的txt文件

时间:2014-02-23 03:04:50

标签: python regex compiler-construction

我是初学者,使用python。我想创建一个正则表达式来捕获python中编译器输出的错误消息。我该怎么做?

例如,如果编译器输出是以下错误消息:

Traceback (most recent call last):
  File "sample.py", line 1, in <module>
    hello
NameError: name 'hello' is not defined

我希望只能从输出中提取以下字符串:

NameError: name 'hello' is not defined

在这种情况下,只有一个错误,但我想提取编译器输出的所有错误。如何使用正则表达式执行此操作?或者如果有更简单的方法,我愿意接受建议

1 个答案:

答案 0 :(得分:1)

r'Traceback \(most recent call last\):\n(?:[ ]+.*\n)*(\w+: .*)'

应该提取你的例外;回溯包含所有以空格开头的行,除了异常行。

以上匹配traceback第一行的文字文本,0行或多行以至少一个空格开头,然后捕获后面的行,前提是它以1个或多个单词字符开头(很好地符合Python标识符) ,一个冒号,然后其余的一直到一行。

演示:

>>> import re
>>> sample = '''\
... Traceback (most recent call last):
...   File "sample.py", line 1, in <module>
...     hello
... NameError: name 'hello' is not defined
... '''
>>> re.search(r'Traceback \(most recent call last\):\n(?:[ ]+.*\n)*(\w+: .*)', sample).groups()
("NameError: name 'hello' is not defined",)