谁在抛出(和捕获)这个MySQL异常?
我正在用Python、MySQL和Django进行开发。最近我总是遇到一个错误,但我搞不清楚到底是哪里出了问题:
异常 _mysql_exceptions.ProgrammingError: (2014, "命令不同步;现在无法运行这个命令") 在 <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x20108150>> 被忽略
我的代码中有很多“try”和“exception”块——如果错误发生在其中一个块里,我应该能看到我自己写的调试信息。但上面的这个异常显然是在某个地方被捕获了,因为当这个异常出现时,我的程序并没有崩溃。
我感到很困惑,有人能帮我解决这个问题吗?
5 个回答
经过打印一些信息和调试后,我想我找到了问题所在。使用的一个库没有关闭连接或游标。但这个问题只有在处理大量数据时才会出现。而且这个问题时好时坏,我仍然不知道是谁引发了“命令不同步”的异常。不过现在我们关闭了连接和游标,我就不再看到这些错误了。
这是一个Python错误。
查看链接:http://eric.lubow.org/2009/python/pythons-mysqldb-2014-error-commands-out-of-sync/
看起来你的MySQLdb查询出了点问题。
我遇到了和这个完全一样的错误(使用 MySQLdb 和 Django),后来发现这个错误之所以“被忽略”是因为它发生在一个叫 __del__
的方法里。在 __del__
方法中的异常是会被完全忽略的:object.__del__
数据模型
似乎没有办法从更上层捕捉到这个异常(至少根据这个讨论串),不过你可以修改 MySQLdb/cursors.py 文件,或者使用一种叫做 monkey-patch 的方法,来添加你自己的 __del__
方法,这样可以捕捉到异常,并让你进入 pdb 提示符,或者记录完整的错误追踪信息。