中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python基礎學習教程:python腳本報錯如何忽略MySQLdb的warnings

發布時間:2020-08-11 14:26:57 來源:ITPUB博客 閱讀:195 作者:千鋒Python唐小強 欄目:編程語言

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展示出來了,為什么會展示呢?

Python基礎學習教程:python腳本報錯如何忽略MySQLdb的warnings

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 filterwarnings
filterwarnings('error', category=MySQLdb.Warning)

打印異常:

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

把異常轉化為error捕獲會報錯:

Traceback (most recent call last):
 File "test.py", line 548, in <module>
 main()
 File "test.py", line 533, in main
 cursor_build.execute(insert_build_sql)
 File "cursors.py", line 175, in execute
 if not self._defer_warnings: self._warning_check()
 File "/cursors.py", line 89, in _warning_check
 warn(w[-1], self.Warning, 3)
_mysql_exceptions.Warning: Duplicate entry '11-5' for key 'idx_user_city'

本地測試是沒通過,但是覺得這種方式應該是可行的,礙于時間,選擇了下面的屏蔽warings方式,不過這種轉換warnings為error的思路還是很好地,有興趣的同學可以嘗試下。

2、把warnings 直接忽略:

from warnings import filterwarnings
filterwarnings('ignore', category=MySQLdb.Warning)

下面的try..except中只需要正常捕獲異常就行。執行py腳本:

[xxx]$ python2.7 test.py 
01:44:45 py Finished

執行成功,查看數據庫,也都成功寫入,世界都安靜了。

更多的 Python基礎學習教程接下來會繼續為大家更新!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

惠安县| 巴里| 保山市| 阳东县| 千阳县| 闽清县| 马尔康县| 离岛区| 定襄县| 峨山| 格尔木市| 濉溪县| 金华市| 泾源县| 平武县| 常山县| 墨竹工卡县| 随州市| 富平县| 靖安县| 天等县| 永登县| 绥滨县| 静安区| 揭西县| 康乐县| 特克斯县| 体育| 贺兰县| 墨竹工卡县| 海城市| 元朗区| 西充县| 东莞市| 鹤峰县| 福安市| 三明市| 视频| 滕州市| 高青县| 宣武区|