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は割り当てられません。また、DB への接続が失敗した場合、何をロールバックしますか?

于 2013-02-25T21:16:43.840 に答える