0

我的Dbconn班级有以下构造函数:

def __init__(self):
    self.host     = "localhost"
    self.database = "my_database"
    self.username = "username"
    self.password = "password"

    try:
        self.db = MySQLdb.connect(
            self.host,
            self.username,
            self.password,
            self.database
        )
        self.cursor = self.db.cursor()
    except:
        print "There was an error while connecting to the database"
        self.db.rollback()

但是,当我执行程序时,我得到:

  File "database.py", line 39, in __init__
    self.db.rollback()
AttributeError: Dbconn instance has no attribute 'db'

任何线索为什么我得到那个?

4

3 回答 3

4

MySQLdb.connect()失败时,根本self.db不设置。在那个时候回滚是没有意义的。

首先将其设置为None,然后在except处理程序中对其进行测试:

db = None

def __init__(self):
    self.host     = "localhost"
    self.database = "my_database"
    self.username = "username"
    self.password = "password"

    try:
        self.db = MySQLdb.connect(
            self.host,
            self.username,
            self.password,
            self.database
        )
        self.cursor = self.db.cursor()
    except MySQLdb.Error:
        print "There was an error while connecting to the database"
        if self.db is not None:
            self.db.rollback()

我还使异常处理程序更具体;毯子except处理程序很少是一个好主意。

于 2013-02-25T21:16:16.847 回答
1

self.db如果MySQLdb.connect抛出异常,则不会分配任何内容。

于 2013-02-25T21:15:50.643 回答
0

如果MySQLdb.connect失败,db则不会分配该属性。另外,如果连接到数据库失败,你想回滚什么?

于 2013-02-25T21:16:43.840 回答