Python和MySQLdb - 使用DROP TABLE IF EXISTS似乎抛出异常

Wiz*_*ard 7 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
Run Code Online (Sandbox Code Playgroud)

如果任务表不存在,那么我会得到一个警告

create_database.py:11: Warning: Unknown table 'tasks'
Run Code Online (Sandbox Code Playgroud)

但如果表存在,那么我不会得到那个警告.奇?

tho*_*ask 22

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

import warnings
warnings.filterwarnings("ignore", "Unknown table.*")
Run Code Online (Sandbox Code Playgroud)

您可以使用要抑制的任何内容编辑第二个参数.


小智 11

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

from warnings import filterwarnings
import MySQLdb

filterwarnings('ignore', category = MySQLdb.Warning)
Run Code Online (Sandbox Code Playgroud)

  • 它确实比thomdask答案更优雅,但是,它不会影响我们可能不想忽视的其他警告吗? (3认同)

Tom*_*ski 6

这是完全正确的行为.如果表存在,那么它就被删除了.如果它不存在则会出现与错误不同的警告异常- 您可以自由地忽略它并且不会发生任何错误,但您必须捕获它以允许您的脚本继续运行.

编辑:

要防止警告冒泡,只需将其捕获为任何其他异常:

try:
    [some code]
except MySQLdb.Warning:
    [exception handling code]
Run Code Online (Sandbox Code Playgroud)

  • 抓住MySQLdb.Warning对我没有任何帮助.有关替代修复,请参阅[thomdask的答案](http://stackoverflow.com/a/4830497/307705). (5认同)