2014-02-23 62 views
1

我是一个初学者使用python。我想创建一个正则表达式来捕获Python中编译器输出的错误消息。我将如何做到这一点?python输出编译器错误到一个txt文件

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

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 

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

+0

'NameError'是一个运行时错误,而不是一个编译时错误。 Python只会向您显示遇到的第一个错误,除非您正在捕获异常并将其回溯显式写入控制台。 –

+0

有没有办法使用正则表达式来提取此错误,我将控制台输出存储在txt中 – Dreadlock

+0

错误文本始终由行开头的“Traceback”作为前缀,异常是* next *在开始处插入文字。从那里推断。 :-) –

回答

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",) 
+0

谢谢,这有帮助! – Dreadlock