Python|发出警告信息
问题——有一个可以发出警告消息的程序(例如,关于不推荐使用的功能或使用问题)。
代码 #1:使用warnings.warn()
函数
import warnings
def func(x, y, logfile = None, debug = False):
if logfile is not None:
warnings.warn('logfile argument deprecated',
DeprecationWarning)
warn()
的参数是带有警告类的警告消息,通常是以下之一:UserWarning、DeprecationWarning、SyntaxWarning、RuntimeWarning、ResourceWarning 或 FutureWarning。
警告的处理取决于解释器的执行方式和其他配置。如果运行带有-W all
选项的Python ,将获得以下输出:
bash % python3 -W all example.py
example.py:5: DeprecationWarning: logfile argument is deprecated
warnings.warn('logfile argument is deprecated', DeprecationWarning)
通常,警告只会在标准错误上产生输出消息。要将警告转换为异常,请使用-W error
选项。
代码#2:
bash % python3 -W error example.py
Traceback (most recent call last):
File "example.py", line 10, in
func(2, 3, logfile ='log.txt')
File "example.py", line 5, in func
warnings.warn('logfile argument is deprecated',
DeprecationWarning)
DeprecationWarning: logfile argument is deprecated
bash %
发出警告消息通常是一种有用的技术,可用于维护软件并帮助用户解决不一定会上升到完全异常级别的问题。
代码 #3 :在不关闭文件的情况下销毁文件生成的警告消息。
import warnings
warnings.simplefilter('always')
f = open('/etc/passwd')
del f
输出 :
__main__:1: ResourceWarning: unclosed file
<_io.TextIOWrapper name='/etc/passwd' mode='r' encoding='UTF-8'>
- 默认情况下,不会显示所有警告消息。 Python的-W选项可以控制警告消息的输出。
- -W all 将输出所有警告消息,-W ignore 忽略所有警告,-W error 将警告变成异常。
- 作为一种替代方法,可以使用warnings.simplefilter()函数来控制输出。参数 always 使所有警告消息出现,ignore 忽略所有警告,error 将警告变成异常。
- 警告模块提供了与过滤和处理警告消息相关的各种更高级的配置选项。