我是初学者,使用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
在这种情况下,只有一个错误,但我想提取编译器输出的所有错误。如何使用正则表达式执行此操作?或者如果有更简单的方法,我愿意接受建议
答案 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",)