<p>您的<code>__del__</code>方法引起了混乱。具体地说,它指的是<code>self.cursor</code>和{<cd3>},如果<code>MySQLdb.Connect</code>引发异常(这似乎就是发生的事情),则可能永远不会创建它们。在</p>
<p>我建议你修改你的类如下:</p>
<pre><code>class MySQL( object ):
def __init__( self ):
self.conn = None
self.cursor = None
self.host = config.get("mysql","host")
self.port = config.get("mysql","port")
self.user = config.get("mysql","user")
self.passwd = config.get("mysql","passwd")
self.db = config.get("mysql","db")
self.unix_socket = config.get("mysql","unix_socket")
self.conn = MySQLdb.Connect(self.host,
self.port,
self.user,
self.passwd,
self.db,
self.unix_socket)
self.cursor = self.conn.cursor ( MySQLdb.cursors.DictCursor )
def __del__( self ):
if self.cursor is not None:
self.cursor.close()
if self.conn is not None:
self.conn.close()
</code></pre>
<p>这不能解决问题,但应该能提供更好的诊断。在</p>
<p>现在来看看你遇到的实际问题。我强烈怀疑您以错误的顺序为<code>Connect</code>提供参数,或者类型不太正确,或者是这些行中的某些东西。要引用<code>Connection.__init__</code>的docstring:</p>
^{pr2}$
<p><strong>“强烈建议您只使用关键字参数。”</strong>我建议您在调用<code>MySQLdb.Connect</code>时这样做。另外,请确保<code>port</code>是<code>int</code>,而不是字符串。在</p>