JAVA 获取python调试信息_如何使用调试信息记录Python错误?

我正在使用logging.error将Python异常消息打印到日志文件中:

import logging

try:

1/0

except ZeroDivisionError as e:

logging.error(e) # ERROR:root:division by zero

是否可以打印有关异常的更详细信息以及生成它的代码而不仅仅是异常字符串? 线号或堆栈跟踪之类的东西会很棒。

#1楼

一个干净的方法是使用format_exc()然后解析输出以获取相关部分:

from traceback import format_exc

try:

1/0

except Exception:

print 'the relevant part is: '+format_exc().split('\n')[-2]

问候

#2楼

关于SiggyF的答案未显示的logging.exception一个好处是你可以传递任意消息,并且日志记录仍将显示包含所有异常详细信息的完整回溯:

import logging

try:

1/0

except ZeroDivisionError:

logging.exception("Deliberate divide by zero traceback")

使用默认(在最新版本中)记录只是将错误打印到sys.stderr行为,它看起来像这样:

>>> import logging

>>> try:

... 1/0

... except ZeroDivisionError:

... logging.exception("Deliberate divide by zero traceback")

...

ERROR:root:Deliberate divide by zero traceback

Traceback (most recent call last):

File "", line 2, in

ZeroDivisionError: integer division or modulo by zero

#3楼

使用exc_info选项可能更好,允许您选择错误级别(如果使用exception ,它将始终显示error ):

try:

# do something here

except Exception as e:

logging.fatal(e, exc_info=True) # log exception info at FATAL log level

#4楼

这个答案来自上述优秀的答案。

在大多数应用程序中,您不会直接调用logging.exception(e)。 您很可能已经为您的应用程序或模块定义了一个特定的自定义记录器,如下所示:

# Set the name of the app or module

my_logger = logging.getLogger('NEM Sequencer')

# Set the log level

my_logger.setLevel(logging.INFO)

# Let's say we want to be fancy and log to a graylog2 log server

graylog_handler = graypy.GELFHandler('some_server_ip', 12201)

graylog_handler.setLevel(logging.INFO)

my_logger.addHandler(graylog_handler)

在这种情况下,只需使用记录器来调用异常(e),如下所示:

try:

1/0

except ZeroDivisionError, e:

my_logger.exception(e)

#5楼

如果您的应用程序以其他方式记录 - 不使用logging模块,该怎么办?

现在,可以在这里使用traceback 。

import traceback

def log_traceback(ex, ex_traceback=None):

if ex_traceback is None:

ex_traceback = ex.__traceback__

tb_lines = [ line.rstrip('\n') for line in

traceback.format_exception(ex.__class__, ex, ex_traceback)]

exception_logger.log(tb_lines)

在Python 2中使用它:try: # your function call is here except Exception as ex: _, _, ex_traceback = sys.exc_info() log_traceback(ex, ex_traceback)

在Python 3中使用它:try: x = get_number() except Exception as ex: log_traceback(ex)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值