概述
你可以通过分配给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)
这样,您可以获得对每个警告引发的错误的完整追溯(只有第一个,因为执行将停止…但您可以逐个解决它们,并创建一个过滤器,忽略那些您不想听到的警告再次…
最后
以上就是坚强飞鸟为你收集整理的python出现traceback什么意思_python – 获取Traceback的警告的全部内容,希望文章能够帮你解决python出现traceback什么意思_python – 获取Traceback的警告所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复