Python和MySQLdb—如果存在,则使用DROP TABLE似乎会引发异常

Python和MySQLdb—如果存在,则使用DROP TABLE似乎会引发异常,python,mysql,Python,Mysql,我有这个密码 ..... 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 如果tasks表不存在,那么我会得到如下警告 create_database.p

我有这个密码

.....
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
如果tasks表不存在,那么我会得到如下警告

create_database.py:11: Warning: Unknown table 'tasks'
但是如果这个表格真的存在,我就不会得到这个警告。
奇怪?

这是完全正确的行为。如果该表存在,则会删除它。如果它不存在,那么您会得到警告异常,它与错误不同-您可以随意忽略它,不会发生任何不好的事情,但您必须捕获它才能让脚本继续

编辑:

要防止出现警告,只需将其作为任何其他异常捕获即可:

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

捕获MySQLdb.Warning对我不起作用,因此我找到了另一种抑制警告的方法:

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

您可以编辑第二个参数,无论您想要抑制什么。

避免Mysql警告的最优雅的方法:

from warnings import filterwarnings
import MySQLdb

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

苏。。。有什么方法可以防止它显示在输出中?捕获MySQLdb.Warning对我没有任何帮助。请参阅以获取替代修复。进一步检查时,如果您使用
-Werror
运行python以将警告视为错误,则会触发此代码。因此,将这两种解决方案结合使用可能是有意义的。它确实比thomdask答案更优雅,但它不会影响我们可能不想忽视的其他警告吗?@Roman,我认为这是一个重要的观点,所以我不会说这个解决方案更优雅。它只是不同,抑制所有警告和抑制一个特定的警告。