python出现traceback什么意思_python – 获取Traceback的警告

你可以通过分配给warnings.showwarning获得你想要的。

warnings module documentation本身建议你这样做,所以它不是你被诱惑的源的黑暗面。 🙂

You may replace this function with an alternative implementation by assigning to warnings.showwarning.

你可以定义一个新的函数,做什么warning.showwarning normaly,另外它打印堆栈。然后你把它而不是原来的:

import traceback

import warnings

import sys

def warn_with_traceback(message, category, filename, lineno, file=None, line=None):

log = file if hasattr(file,'write') else sys.stderr

traceback.print_stack(file=log)

log.write(warnings.formatwarning(message, category, filename, lineno, line))

warnings.showwarning = warn_with_traceback

此后,每个警告都将打印堆栈跟踪以及警告消息。然而,考虑到,如果警告被忽略,因为它不是第一个,什么也不会发生,所以你仍然需要执行:

warnings.simplefilter("always")

你可以通过警告模块的过滤器得到numpy.seterr提供的类似的控制

如果你想要的是python每次触发时报告每个警告,而不仅仅是第一次,你可以包括类似:

import warnings

warnings.simplefilter("always")

你可以通过传递不同的字符串作为参数来获得其他行为。使用相同的函数,您还可以根据引发它们的模块,它们提供的消息,警告类,引发它的代码行等,为警告指定不同的行为…

作为示例,您可以设置所有警告以引发异常,但应完全忽略的DeprecationWarnings除外:

import warnings

warnings.simplefilter("error")

warnings.simplefilter("ignore", DeprecationWarning)

这样,您可以获得对每个警告引发的错误的完整追溯(只有第一个,因为执行将停止…但您可以逐个解决它们,并创建一个过滤器,忽略那些您不想听到的警告再次…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值