当前位置: 首页 > 科技观察

Python如何捕获警告?(注:不是捕捉异常)

时间:2023-03-14 20:04:57 科技观察

本文转载自微信公众号《Python编程时间》(Cool-Python)。1.警告没有异常。你在使用一些系统库或第三方模块时是否经常看到一些既不异常也不报错的警告信息?这些警告信息有时会非常多,很容易让新手产生一些误判,以为是程序错误。其实异常和错误都是程序中的一些问题,只是warning不同,它的紧迫性很低,大部分warning可以直接忽略。如果不想显示这些警告信息,可以直接加上参数-Wignore参数,就不会再显示了。2.警告能被捕获吗?只能捕获error异常,但是经过一系列的操作,就可以把这些warnings变成异常。通过这种方式,您可以像异常一样捕获它们。在没有任何设置的情况下,警告直接打印在终端上。3.捕获警告的方法在警告中有一系列的过滤器。当您指定错误时,它会将匹配的警告转换为异常。然后你可以通过异常捕获警告。importwarningswarnings.filterwarnings('error')try:warnings.warn("deprecated",DeprecationWarning)exceptWarningase:print(e)运行后效果如下异常。importwarningstry:warnings.warn("deprecated",DeprecationWarning)exceptWarningase:print(e)在执行$python3-Werrordemo.pydeprecated5时加一个参数-Werror也可以达到同样的效果。捕获警告方法三除了上述方法外,warnings还自带了一个上下文管理器,用于捕获警告。当你添加record=True时,它??会返回所有捕获警告的列表,我将它分配给w,然后我可以打印出来。importwarningsdefdo_warning():warnings.warn("deprecated",DeprecationWarning)和warnings.catch_warnings(record=True)asw:do_warning()iflen(w)>0:print(w[0].message)运行后效果如下跟随