91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

江门市| 乐都县| 青州市| 班玛县| 渭源县| 鲁甸县| 泰顺县| 右玉县| 晋宁县| 瑞昌市| 革吉县| 太和县| 金阳县| 中宁县| 洛宁县| 林芝县| 土默特左旗| 株洲县| 永福县| 临漳县| 龙井市| 万源市| 静宁县| 卢龙县| 阜平县| 琼中| 大荔县| 盐边县| 郸城县| 浠水县| 招远市| 额济纳旗| 临沂市| 南昌市| 响水县| 樟树市| 岢岚县| 沅江市| 南投县| 公安县| 祁阳县|