当前位置: 首页 > 面试题库 >

获取警告的追溯

寿子轩
2023-03-14
问题内容

在numpy中,我们可以np.seterr(invalid='raise')获取对引发错误的警告的回溯。

  • 是否有跟踪警告的一般方法
  • 发出警告时,我可以使python进行追溯吗?

问题答案:

通过分配给,您可以获得想要的东西warnings.showwarning。该警告模块文档本身建议您这样做,所以它不是你被诱惑的
源黑暗的一面 。:)

您可以通过分配给,将其替换为替代功能warnings.showwarning

您可以定义一个新函数,该函数可以正常执行warning.showwarning操作,并且还可以打印堆栈。然后,将其放置而不是原始放置:

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通过warning模块的过滤器获得类似的控件

如果您想要的是python在每次触发警告时(不仅是第一次)都报告每个警告,则可以包含以下内容:

import warnings
warnings.simplefilter("always")

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

您可以在模块文档中查看列表

例如,您可以设置所有警告以引发异常,但DeprecationWarnings应该完全忽略这些警告:

import warnings
warnings.simplefilter("error")
warnings.simplefilter("ignore", DeprecationWarning)

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



 类似资料:
  • 线程“main”java.lang.IllegalAccesserror中出现异常:试图从org.openqa.selenium.firefox.firefoxBinary类中访问org.openqa.selenium.os.ExecutableFinder类,从org.openqa.selenium.firefoxBinary中访问org.openqa.selenium.firefoxBinar

  • 问题内容: 在我的python脚本中,我想使用MySql捕获“我的查询截断了列’xxx’的数据”警告。 我看到了一些建议以下代码的帖子,但它不起作用。 您是否知道在使用此代码之前是否必须导入某些特定模块或是否应调用某些选项/标志? 谢谢大家 阿菲格 问题答案: 警告仅仅是:警告。他们被报告给(通常)stderr,但是没有做其他事情。您不能像异常一样捕获它们,因为它们没有被引发。 你可以,但是,配置

  • 问题内容: 在运行存储过程时,该过程可能会引发警告消息。 有什么办法可以在Golang中使用Postgresql驱动程序(https://github.com/lib/pq)获取这些消息? 问题答案: 答案似乎是否定的。 在我的测试中,Postgres服务器似乎没有发送警告和结果。即使这样做,返回错误以及sql.Result充其量也将造成混乱,并且需要进行修改。在函数 中 引发错误 确实 返回了错

  • 云联壹云平台支持对宿主机、虚拟机、云账号等资源的相关指标进行监控告警,告警消息支持通过机器人、邮件、短信、飞书、钉钉、企业微信等通知渠道发送给用户。 告警策略 告警策略即针对监控指标设置阈值,当资源的指标超过阈值时,将会立即通过通知渠道向用户发送告警消息,使用户可以快速响应解决问题。 告警历史 告警历史显示系统中所有的触发告警以及恢复告警的告警策略和资源信息。 告警资源 告警资源即宿主机、云账号等

  • 我正在使用python处理一些图像,并尝试将一系列大小为961x509的图像转换为MP4电影文件。我已经这样做了,它正在工作,但我有一个相当恼人的问题,警告说这样的话: 警告:根:图像FFMPEG_WRITER警告:输入图像不能被macro_block_size=16整除,大小从(509L,961L)到(512L,976L),以确保与大多数编解码器和播放器的视频兼容性。若要防止调整大小,请使输入图

  • 问题内容: 我正在开发基于狮身人面像的协作写作工具。用户访问Web应用程序(在python / Flask中开发),以sphinx编写一本书并将其编译为pdf。 我了解到,为了从python中编译sphinx文档,我应该使用 到现在为止还挺好。 现在,我的用户希望该应用向他们显示他们的语法错误。但是输出(在上面的示例中)仅提供了退出代码。 那么,如何从构建过程中获取警告列表? 也许我太有野心了,但