我的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'
为什么我得到了这个?
答案 0 :(得分: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
处理程序很少是个好主意。
答案 1 :(得分:1)
如果self.db
抛出异常,则不会将MySQLdb.connect
分配给任何内容。
答案 2 :(得分:0)
如果MySQLdb.connect
失败,则不会分配db
属性。另外,如果连接到数据库失败,您想要回滚什么?