2010-11-10 71 views
6

我得到這個代碼..Python和MySQLdb的 - 使用DROP TABLE IF EXISTS似乎拋出異常

..... 
try: 
    task_db.cursor.execute('DROP TABLE IF EXISTS `tasks`') 
    print "Affected: %d" % task_db.cursor.rowcount 
except MySQLdb.Error, e: 
    print "Error ocurred: %s " % e.args[0] 
    print e 

如果工作表不存在,那麼我得到這樣

create_database.py:11: Warning: Unknown table 'tasks' 
警告

但是,如果表確實存在,那麼我不會得到那個警告。 奇數?

回答

6

這是完全正確的行爲。如果該表存在,則它被丟棄。如果它不存在,那麼你得到警告例外,這是不一樣的錯誤 - 你可以自由地忽略它並沒有什麼不好的事情發生了,但你必須抓住它,讓你的腳本進行。

編輯:

爲了防止警告冒泡,正好趕上它與任何其他異常:

try: 
    [some code] 
except MySQLdb.Warning: 
    [exception handling code] 
+0

洙......什麼辦法,以防止被顯示在輸出? – Wizzard 2010-11-10 20:32:45

+0

我編輯了我的答案 – 2010-11-10 22:45:24

+5

捕捉MySQLdb.Warning對我沒有任何幫助。請參閱[thomdask的回答](http://stackoverflow.com/a/4830497/307705)瞭解替代修復方法。 – 2011-12-05 23:09:06

22

鳳雲MySQLdb.Warning我沒有工作,所以我找到了另一種方式來取消警告:

import warnings 
warnings.filterwarnings("ignore", "Unknown table.*") 

而且您可以編輯第二個參數,無論您想要抑制什麼。

11

最優雅的方式來避免Mysql的警告:

from warnings import filterwarnings 
import MySQLdb 

filterwarnings('ignore', category = MySQLdb.Warning) 
+3

它確實比thomdask答案更優雅,但,是不是也影響我們可能不想理會? – 2014-05-23 11:45:53

+0

@Roman其它警告,我認爲這是一個重要的一點,所以我不會說這個解決方案更優雅。它只是不同,抑制所有的警告,抑制一個特定的警告。 – chishaku 2014-10-08 18:41:05