【问题标题】:Output compiler error to a txt file in python将编译器错误输出到python中的txt文件
【发布时间】:2014-02-23 03:04:49
【问题描述】:

我是使用 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

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

【问题讨论】:

  • NameError 是运行时错误,而不是编译时错误。 Python 只会向您显示遇到的第一个错误,除非您正在捕获异常并将其回溯显式写入控制台。
  • 有没有办法使用正则表达式提取此错误,我将控制台输出存储在 txt 中
  • 错误文本在行首总是以Traceback 开头,但next 行开头的文本除外。从那里推断。 :-)

标签: python regex compiler-construction


【解决方案1】:
r'Traceback \(most recent call last\):\n(?:[ ]+.*\n)*(\w+: .*)'

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

上面匹配回溯第一行的文字文本,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",)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    相关资源
    最近更新 更多