2013-02-25 45 views
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' 

任何線索,爲什麼我得到那?

+1

只捕捉你知道如何處理的異常。在這種情況下,我不知道你的代碼有什麼問題,但是很高興知道導致你輸入'except'子句的異常。 – mgilson 2013-02-25 21:16:04

+0

**編輯** - 我確實知道問題所在 - 我只是看起來不夠近。我仍然堅持我原來的聲明 - 只處理你期望的異常,除此之外別無其他。 – mgilson 2013-02-25 21:18:08

回答

4

MySQLdb.connect()失敗時,self.db未設置根本沒有。在這一點上回滾沒有意義。

開始由except處理程序將其設置爲None,然後測試該:

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處理程序很少是一個好主意。

+0

你已釘! – cybertextron 2013-02-25 21:20:05

1

如果MySQLdb.connect引發異常,則不會將其分配給self.db

0

如果MySQLdb.connect失敗,則不會分配db屬性。另外,如果連接到數據庫失敗,你想要回滾什麼?