第十八章:语言工具
18.1 warnings:非致命警告
warnings模块由PEP 230引入,由于预见到Python 3.0中会出现不能向后兼容的改变,所以以这种方式来警告程序员,指出语言或库特性已出现改变。这个模块还可以用来报告可恢复的配置错误或者因为缺少库而出现的特性降级。不过,最好通过logging模块提供用户可见的消息,因为发送到控制台的警告可能丢失。由于警告不是致命的,所以程序员在运行过程中可能会多次遇到相同的警告情况。warnings模块会抑制相同来源的重复消息,避免因为反复看到同样的警告而厌烦。可以逐情况地控制输出,为此可以使用解释器的命令行选项,也可以调用warnings中的函数。
18.1.1 分类和过滤
警告使用内置异常类Warning的子类进行分类。exceptions模块的联机文档中描述了很多标准值,还可以通过派生Warning增加定制警告。
警告要根据过滤器(filter)设置来处理。过滤器包括5个部分:动作(action)、消息(message)、类别(category)。模块(module)和行号(line number)。过滤器的消息部分是一个正则表达式,用来匹配警告文本。类别是一个异常类的类名。模块包含一个正则表达式,要与生成警告的模块名匹配。行号可以用来改变警告出现时的处理。
在生成一个警告时,要与所有注册的过滤器比较。第一个匹配的过滤器将控制对这个警告采取的动作。如果没有匹配的过滤器,则会采取默认动作。过滤机制支持的动作如表18-1所示。