首页 > 解决方案 > 计算在 Python 中导致错误的方法数

问题描述

我有一个 Python 日志文件(我们称之为logfile.log),其中包含一堆 Python 错误。有一个特定的错误是由几种不同的方法引起的(我们称之为blah blah error)。条目看起来像这样:

CRITICAL - Unexpected Error: blah blah error
Traceback (most recent call last):
  File "example1.py", line 100, in method1
  File "example2.py", line 200, in method2
  File "example3.py", line 300, in method3
pythonerror.Error: blah blah error

在上面的示例中,错误的来源method3——可以是几种不同的方法。我想浏览整个日志文件并计算每种方法在其中一个错误中出现的次数(如果有的话)。这可以使用正则表达式吗?我需要做什么才能做到这一点?

注意:日志文件不仅包含此特定错误,因此该方法可能会出现在其他错误中。仅当它在该特定错误内并且仅当它是错误的来源(上例中倒数第二行)时,我才想获得它的计数。

标签: pythonregex

解决方案


您可以使用正则表达式来做到这一点:

import re

regex = re.compile(
    (r"^.*line \d+, in (?P<method>.*)$\n^pythonerror\.Error: blah blah error$"),
    re.MULTILINE,
)

test_str = """
CRITICAL - Unexpected Error: blah blah error
Traceback (most recent call last):
    File "example1.py", line 100, in method1
    File "example2.py", line 200, in method2
    File "example3.py", line 300, in method3
pythonerror.Error: blah blah error

CRITICAL - Unexpected Error: blah blah error
Traceback (most recent call last):
    File "example2.py", line 200, in method2
    File "example3.py", line 300, in other_method
pythonerror.Error: blah blah error

CRITICAL - Unexpected Error: blah blah error
Traceback (most recent call last):
    File "example3.py", line 300, in other_method
pythonerror.Error: blah blah error
"""

for match in regex.finditer(test_str):
    print(match.groupdict()["method"])

推荐阅读