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

在python中将编译器错误输出到txt文件,python,regex,compiler-construction,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 在这种情况下,只有一个错误,但是我想提取编译器输出的所有错误。如何使用正则表达式实现这一点?或者如

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

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

Traceback (most recent call last):
  File "sample.py", line 1, in <module>
    hello
NameError: name 'hello' is not defined
在这种情况下,只有一个错误,但是我想提取编译器输出的所有错误。如何使用正则表达式实现这一点?或者如果有更简单的方法,我愿意接受建议

r'Traceback \(most recent call last\):\n(?:[ ]+.*\n)*(\w+: .*)'
应该提取您的异常;回溯包含所有以空格开头的行(例外行除外)

上面匹配回溯第一行的文字文本,0行或多行以至少一个空格开头,然后捕获下一行,前提是该行以1个或多个单词字符(非常适合Python标识符)、冒号开头,然后捕获到行尾的其余部分

演示:

>>重新导入
>>>样本='''\
... 回溯(最近一次呼叫最后一次):
...   文件“sample.py”,第1行,在
...     你好
... NameError:未定义名称“hello”
... '''
>>>重新搜索(r'Traceback\(最近一次调用last\):\n(?:[]+.\n)*(\w+:.*),示例).groups()
(“名称错误:未定义名称‘hello’”,)

namererror
是一个运行时错误,而不是编译时错误。Python只会向您显示遇到的第一个错误,除非您捕获异常并显式地将其回溯到控制台。是否有方法使用正则表达式提取此错误,我将控制台输出存储在TXT中错误文本始终在一行开头的
Traceback
前面,例外情况是下一行开头有文本。从那里推断。:-)
r'Traceback \(most recent call last\):\n(?:[ ]+.*\n)*(\w+: .*)'
>>> 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",)