使用 Python 中的调试信息记录错误

Najwa Riyaz 2023年1月30日
  1. 在 Python 中使用 exception() 方法记录带有详细调试信息的错误
  2. 使用带有 stack_infoexception() 方法在 Python 3.2+ 中记录带有详细调试信息的错误
  3. 在 Python 3.5+ 中使用带有 exc_infoexception() 方法记录带有详细调试信息的错误
使用 Python 中的调试信息记录错误

本文介绍了如何在 Python 中使用详细的调试信息记录错误。

要显示详细的调试信息,请在 Python 中导入 logging 库并使用 logging.exception() 方法。它将显示错误消息和堆栈跟踪。

我们知道异常字符串将帮助你了解 Python 中发生的确切错误。除此之外,我们可以确定有关异常和生成异常的代码行的详细信息。

except 代码块中调用 logging.exception() 方法;这有助于显示带有错误消息的堆栈跟踪。在这个记录器上,它记录了级别为 ERROR 的消息。异常信息附加到日志消息中。

在 Python 中使用 exception() 方法记录带有详细调试信息的错误

这是一个示例,演示了如何在 Python 中记录带有详细调试信息的错误。

import logging


def fnc_divide(n):
    try:
        result = n / 0
        print("The result=", result)

    except:
        print("The except block")
        logging.exception("The detailed error message -")


fnc_divide(5)

输出:

The except block
ERROR:root:The detailed error message -
Traceback (most recent call last):
  File "C:/Users/../a.py", line 4, in fnc_divide
    result=n/0
ZeroDivisionError: division by zero

请注意,在输出中,显示了有关错误的详细信息,如下所示。

  • 它提到了发生错误的模块/功能。在此示例中,输出显示错误发生在 fnc_divide() 方法中。
  • 它提到了发生错误的行号。在此示例中,输出显示错误发生在第 4 行。
  • 它提到了确切的错误。在这个例子中,它是 ZeroDivisionError: division by zero

使用带有 stack_infoexception() 方法在 Python 3.2+ 中记录带有详细调试信息的错误

从 Python 3.2+ 开始,你可以将 stack_info 参数作为 True 传递。它显示了你如何到达代码中的特定点;这也是没有引发异常的情况。

如果 stack_infoTrue,堆栈信息将添加到日志消息中,加上实际的日志调用,并按顺序与堆栈帧相关联。顺序是从堆栈底部到当前线程中的日志记录调用。

看看下面的这个示例代码。

import logging


def fnc_dividestack(n):
    try:
        result = n / 0
    except Exception:
        logging.exception("The detailed error message -", stack_info=True)


fnc_dividestack(4)

输出:

ERROR:root:The detailed error message -
Traceback (most recent call last):
  File "C:/Users/Ri..error.py", line 5, in fnc_dividestack
    result=n/0
ZeroDivisionError: division by zero
Stack (most recent call last):
  File "C:/Users/Ri..error.py", line 9, in <module>
    fnc_dividestack(4)
  File "C:/Users/Ri..error.py", line 7, in fnc_dividestack
    logging.exception("The detailed error message -", stack_info=True)

在 Python 3.5+ 中使用带有 exc_infoexception() 方法记录带有详细调试信息的错误

从 Python 3.5+ 开始,你可以在 exc_info 参数中传递异常实例。此参数接受异常实例。

请注意,如果发生异常,exc_info 元组保存当前的异常信息;否则,它的值为 None。下面是演示此过程的示例。

import logging


def fnc_divide(n):
    try:
        result = n / 0
        print("The result=", result)

    except Exception as e:
        logging.exception("The exc_info - Zero Division error", exc_info=e)


fnc_divide(5)

输出:

ERROR:root:The exc_info - Zero Division error
Traceback (most recent call last):
  File "C:/Users/R..ror.py", line 4, in fnc_divide
    result=n/0
ZeroDivisionError: division by zero

相关文章 - Python Logging