python怎么消除警告_Python-警告处理
python 下Warning的使用
起因是这样的,当我使用pymysql模块执行建表的sql语句时获,在控制台输出了红色的消息,但是程序并没有终止而是继续运行了
sql语句如下:
CREATE TABLE IF NOT EXISTS test(age int);
整体代码:
import pymysql
conn = pymysql.connect(
user= "root",
password="",
database="test"
)
c = conn.cursor()
c.execute("create table if not exists abc(age int)")
得到的警告信息如下:
"""
NoneType: None
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py:170: Warning: (1050, "Table 'abc' already exists")
result = self._query(query)
"""
Process finished with exit code 0
sql语句是如果表存在则放弃创建,这意味着这个警告是应该的,并没有逻辑上的错误,但是这个红色的消息,让人看着不爽,于是找到了如下解决方案:
from warnings import filterwarnings
filterwarnings("ignore",category=pymysql.Warning)
问题得到解决,作为强迫症患者,必须在深入研究一下,得出以下结论:
warning模块中主要的两个方法
1.warn
该方法用于输出一个警告信息
#参数一: message 表示警告的详细信息
#参数二: category 类别,需要一个类作为参数,该类必须是Warning的子类,Warning类是Exception的子类,用于给警告设置一个具体的类型
#参数三: stacklevel 指定调用栈的层级,用于确定要从哪一级获取行号
#参数四: 没研究
stacklevel在源码中的调用:
上述代码获得一个frame,用于获取行号
由以上源码可以get到一个小技能即获取行号
python获取行号:
import sys
f = sys._getframe() # f 是一个对象class为 frame 但是该类无法直接访问,猜想是系统底层隐藏的毕竟与解释器核心数据相关
print(f.f_lineno) # f_lineno就是用于获取行号的属性
"""
在源码中可以看到_getframe函数是可以给一个整型参数的,
经过测试,得出结论,该参数用于,指定从栈的哪一个位置获取行号,
"""
#测试代码:
1 import sys
2 def task():
3 f = sys._getframe(2)
4 print(f.f_lineno)
5
6 def task2():
7 task()
8
9 task2()
"""
0表示从当前位置,即执行_getframe的地方
1表示获取上一级调用位置的行号 即第7行
2表示上上级 即第9行 以此类推...
"""
2.filterwarnings
该方法用于过滤警告信息
#参数action: 表示如何处理这个警告
可选的值 "error", "ignore", "always", "default", "module","once"
error会将警告作为异常抛出
ignore表示忽略该类警告不会打印
once表示该相同类型相同消息的警告仅打印一次
#参数category: 需要一个类,表示是要过滤的警告类别
#参数module: 需要一个模块,表示是要过滤的模块名称
#参数lineno:一个整型,表示要过滤哪一行的警告 0表示所有行 其他值貌似没有作用
意外发现
在查看源码是,发现了一个用于表示警告消息的类
该类非常简单,就是保存了一些警告信息,然后覆盖了 __str__函数,用于自定义字符串形式
其中的初始化函数引起了我的注意,分析了一下,发现这个写法不错,可以简化初始化中的属性赋值操作于是做了一下实验:
# 通用的类初始化方法
class Person():
def __init__(self,a,b,c):
for k,v in locals().items():
if k != "self":
setattr(self,k,v)
p = Person(1,2,3)
print(p.a)
print(p.b)
该方法最大的好处在于,无论初始化方法中需要多少参数都可以一一赋值,对于初始化参数多的类非常友好;
其原理是通过locals()来获取函数中的局部变量的字典形式,然后遍历字典,排除self之后其他的都设置为self的属性,用形参的名字作为熟悉名,大大减少了一堆重复的赋值代码!
否则你的代码可能是这样的:
class Person():
def __init__(self,a,b,c,d):
self.a = a
self.b = b
self.c = c
self.d = d
p = Person(1,2,3,4)
print(p.a)
print(p.b)
print(p.c)
如果参数特比多的话,你懂的......
python怎么消除警告_Python-警告处理相关推荐
- Keil5消除未调用警告
Keil5消除未调用警告 1.点击魔法棒 2.点击device,勾选LX51 3.点击LX51 Misc,在Misc controls处 输入 REMOVEUNUSED 再点击ok保存
- BB10 Cascades: 如何消除“Unresolved inclusion”警告信息
http://blog.csdn.net/keyboardota/article/details/8464299 在BB10 Cascades Gold版本中,如果你新建一个BlackBerry项目, ...
- iOS消除对应的警告!
iOS消除对应的警告! 字数7989 阅读12383 评论10 喜欢29 在iOS开发过程中, 我们可能会碰到一些系统方法弃用, weak.循环引用.不能执行之类的警告. 有代码洁癖的孩子们很想 ...
- 建议:消除非受检警告。
用泛型编程时,会遇到许多编译器警告:非受检强制转化警告(unchecked cast warnings).非受检方法调用警告.非受检普通数组创建警告,以及非受检转换警告(unchecked conve ...
- python中文开发环境_Python开发环境配置
对于刚入门的新手, Python 的环境配置可能是个障碍, 对于刚进阶的学习者则可能在环境管理, 依赖管理上遇到问题, 或者陷入纠结(比如我) 在这推荐我目前的解决方案: Python+MiniCon ...
- python 数据框缺失值_Python:处理数据框中的缺失值
python 数据框缺失值 介绍 (Introduction) In the last article we went through on how to find the missing value ...
- python中oserror捕获_Python assert异常处理(一看即懂)
Python 还支持断言语法.在一套程序完成之前,编程者并不知道程序可能会在哪里报错,或是触发何种条件的报错,因此使用断言语法可以有效地做好异常检测,并适时触发和抛出异常. Python 中使用 as ...
- vscode使用教程python-VSCode下好用的Python插件及配置_python
这篇文章主要介绍了微软官方的Python插件,已经自带很多功能,下面是插件功能描述,其中部分内容我做了翻译,需要的朋友可以参考下 MS Python插件. 这是微软官方的Python插件,已经自带很多 ...
- python算法和数据结构_Python中的数据结构和算法
python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...
- python中定义数据结构_Python中的数据结构—简介
python中定义数据结构 You have multiples algorithms, the steps of which require fetching the smallest value ...
最新文章
- mysql底层用什么写的_天天写order by,你知道Mysql底层如何执行吗?
- c语言打开外部doc文件,C语言-内部函和外部函数.doc
- 智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯
- Linux运维人员共用root帐户权限审计
- 《Python游戏趣味编程》 第1章 Python与开发环境介绍
- JavaWeb19-HTML篇笔记
- 随机前沿方法和数据包络分析
- cmd 打开资源监视器
- 高薪岗位大数据开发工程师要如何入门?【重磅】
- app上架因为副标题被App Store残忍拒绝!
- 那些年,我们遇到的傻X问题
- Python语法小白入门
- 中兴和华为的面试经历
- 使用word2vec预训练模型提取DNA/RNA序列特征向量
- 【麒麟操作系统软件商店老是闪退?--麒麟系统软件商店卸载与重装(小白教程)】
- 批量抠图,只需要这几行python代码!
- vue -- 移动端(vant)更换头像剪切功能
- ADI官网资料检索技巧
- 数据库-MySQL-基础(2)-DDL操作
- Ptcms精美小说阅读网站源码+带采集规则