使用 Python 中的调试信息记录错误
Najwa Riyaz
2023年1月30日
-
在 Python 中使用
exception()
方法记录带有详细调试信息的错误 -
使用带有
stack_info
的exception()
方法在 Python 3.2+ 中记录带有详细调试信息的错误 -
在 Python 3.5+ 中使用带有
exc_info
的exception()
方法记录带有详细调试信息的错误
本文介绍了如何在 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_info
的 exception()
方法在 Python 3.2+ 中记录带有详细调试信息的错误
从 Python 3.2+ 开始,你可以将 stack_info
参数作为 True
传递。它显示了你如何到达代码中的特定点;这也是没有引发异常的情况。
如果 stack_info
是 True
,堆栈信息将添加到日志消息中,加上实际的日志调用,并按顺序与堆栈帧相关联。顺序是从堆栈底部到当前线程中的日志记录调用。
看看下面的这个示例代码。
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_info
的 exception()
方法记录带有详细调试信息的错误
从 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