后端在插入数据发现重复如何正确的弹出警告_Python基础学习教程:python脚本报错如何忽略MySQLdb的warnings...

Python基础学习教程:python脚本报错如何忽略MySQLdb的warnings

一、前言

这是在执行python脚本的时候遇到的bug,疯狂的报warnings警告,一坨一坨的,看着实在不雅观,so,还是解决一下比较好。本篇主要讲述的是错误的发现以及如何忽略warnings警告。

报错如下:

test.py:531: Warning: Duplicate entry '11-5' for key 'idx_user_city' cursor_build.execute(insert_build_sql)test.py:531: Warning: Duplicate entry '367-2' for key 'idx_user_city'

根据报错,我们知道错误是因为插入数据的时候主键重复造成的。不过已经用了insert ignore into来插入了,怎么还是会报错呢?

二、为何会抛出warnings

1、抛出错误的原因

后来搜索发现,insert ignore 的插入方式,虽然能避免异常error,但是确实会抛出异常。只是平时没有像这次把warings展示出来了,为什么会展示呢?

be1b06f3c29c6594083fb5708b929812.png

2、mysql的因素

查看mysql的错误级别:

mysql> show variables like '%log_warnings%';+---------------+-------+| Variable_name | Value |+---------------+-------+| log_warnings | 1 |+---------------+-------+1 row in set, 1 warning (0.00 sec)

根据log_warnings定义:

(1) log_warnings用于标识警告信息是否一并记录到错误日志中。

(2) log_warnings的值为0,表示不记录警告信息。

(3) log_warnings的值为1,表示警告信息一并记录到错误日志中。

(4) log_warnings的值大于1,表示"失败的连接"的信息和创建新连接时"拒绝访问"类的错误信息也会被记录到错误日志中。

由此可见此时的数据库,设置的错误级别是记录warnings的,只是你记录没错,但是抛出来就是你的不对了呀。

三、修改python脚本,实现屏蔽warnings错误的目的

默认的try..except是捕获python脚本中的error的,默认是捕获不到warnings,那么是否可以把warnings转化成error,然后用try..except来捕获呢

1、把warnings转化成error捕获

#import部分from warnings import filterwarningsfilterwarnings('error', category=MySQLdb.Warning)

打印异常:

try: xxxxexcept MySQLdb.Warning, w:sqlWarning = "Warning:%s" % str(w)

把异常转化为error捕获会报错:

Traceback (most recent call last): File "test.py
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值