第十八章:语言工具-warnings:非致命警告-分类和过滤

第十八章:语言工具
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所示。
在这里插入图片描述

make -C /lib/modules/3.10.0-1160.119.1.el7.x86_64/build M=/home/user/1/core_test_folder modules make[1]: Entering directory '/usr/src/kernels/3.10.0-1160.119.1.el7.x86_64' CC [M] /home/user/1/core_test_folder/icmp_ping_monitor.o In file included from include/linux/cache.h:4:0, from include/linux/time.h:4, from include/linux/stat.h:18, from include/linux/module.h:10, from /home/user/1/core_test_folder/icmp_ping_monitor.c:1: /home/user/1/core_test_folder/icmp_ping_monitor.c: 在函数‘ping_stat_show’中: include/linux/kernel.h:792:17: 警告:比较不相关的指针时缺少类型转换 [默认启用] (void) (&_min1 == &_min2); \ ^ /home/user/1/core_test_folder/icmp_ping_monitor.c:83:21: 附注:in expansion of macro ‘min’ for (i = 0; i < min(stats.count, MAX_ENTRIES); i++) { ^ /home/user/1/core_test_folder/icmp_ping_monitor.c: 在文件作用域: /home/user/1/core_test_folder/icmp_ping_monitor.c:100:21: 错误:变量‘ping_stat_fops’有初始值设定但类型不完全 static const struct proc_ops ping_stat_fops = { ^ /home/user/1/core_test_folder/icmp_ping_monitor.c:101:5: 错误:初始值设定项里有未知的字段‘proc_open’ .proc_open = ping_stat_open, ^ /home/user/1/core_test_folder/icmp_ping_monitor.c:101:5: 警告:结构初始值设定项中有多余元素 [默认启用] /home/user/1/core_test_folder/icmp_ping_monitor.c:101:5: 警告:(在‘ping_stat_fops’的初始化附近) [默认启用] /home/user/1/core_test_folder/icmp_ping_monitor.c:102:5: 错误:初始值设定项里有未知的字段‘proc_read’ .proc_read = seq_read, ^ /home/user/1/core_test_folder/icmp_ping_monitor.c:102:5: 警告:结构初始值设定项中有多余元素 [默认启用] /home/user/1/core_test_folder/icmp_ping_monitor.c:102:5: 警告:(在‘ping_stat_fops’的初始化附近) [默认启用] /home/user/1/core_test_folder/icmp_ping_monitor.c:103:5: 错误:初始值设定项里有未知的字段‘proc_lseek’ .proc_lseek = seq_lseek, ^ /home/user/1/core_test_folder/icmp_ping_monitor.c:103:5: 警告:结构初始值设定项中有多余元素 [默认启用] /home/user/1/core_test_folder/icmp_ping_monitor.c:103:5: 警告:(在‘ping_stat_fops’的初始化附近) [默认启用] /home/user/1/core_test_folder/icmp_ping_monitor.c:104:5: 错误:初始值设定项里有未知的字段‘proc_release’ .proc_release = single_release, ^ /home/user/1/core_test_folder/icmp_ping_monitor.c:104:5: 警告:结构初始值设定项中有多余元素 [默认启用] /home/user/1/core_test_folder/icmp_ping_monitor.c:104:5: 警告:(在‘ping_stat_fops’的初始化附近) [默认启用] /home/user/1/core_test_folder/icmp_ping_monitor.c: 在函数‘ping_stat_init’中: /home/user/1/core_test_folder/icmp_ping_monitor.c:121:15: 警告:从不兼容的指针类型赋值 [默认启用] nfho.hook = ping_hook; ^ /home/user/1/core_test_folder/icmp_ping_monitor.c:125:5: 错误:隐式声明函数‘nf_register_net_hook’ [-Werror=implicit-function-declaration] nf_register_net_hook(&init_net, &nfho); ^ /home/user/1/core_test_folder/icmp_ping_monitor.c:128:5: 警告:传递‘proc_create’的第 4 个参数时在不兼容的指针类型间转换 [默认启用] proc_entry = proc_create("ping_stats", 0, NULL, &ping_stat_fops); ^ In file included from /home/user/1/core_test_folder/icmp_ping_monitor.c:3:0: include/linux/proc_fs.h:30:38: 附注:需要类型‘const struct file_operations *’,但实参的类型为‘const struct proc_ops *’ static inline struct proc_dir_entry *proc_create( ^ /home/user/1/core_test_folder/icmp_ping_monitor.c:130:9: 错误:隐式声明函数‘nf_unregister_net_hook’ [-Werror=implicit-function-declaration] nf_unregister_net_hook(&init_net, &nfho); ^ cc1: some warnings being treated as errors scripts/Makefile.build:339: recipe for target '/home/user/1/core_test_folder/icmp_ping_monitor.o' failed make[2]: *** [/home/user/1/core_test_folder/icmp_ping_monitor.o] Error 1 Makefile:1316: recipe for target '_module_/home/user/1/core_test_folder' failed make[1]: *** [_module_/home/user/1/core_test_folder] Error 2 make[1]: Leaving directory '/usr/src/kernels/3.10.0-1160.119.1.el7.x86_64' Makefile:7: recipe for target 'default' failed make: *** [default] Error 2
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值