Python操作SQLite出现NoneType无format属性及数据库锁的原因是什么?
问题原因分析
你遇到的三个问题分别由以下错误导致:
- 首次调用
şarkıları_göster()输出空列表:该方法的执行顺序逻辑错误,你先调用了self.cursor.fetchall()获取查询结果,再执行self.cursor.execute(sorgu,)触发查询。首次调用时还未执行SELECT语句,fetchall()只能拿到空列表,因此直接输出"Listenizde şarkı bulunmuyor"。正确顺序应该先执行查询,再获取结果。 - 抛出
AttributeError: 'NoneType' object has no attribute 'format'错误:Şarkı类的__str__方法存在两处语法错误:print()函数的返回值为None,你将format()方法写到了print()的括号外侧,相当于调用None.format(),自然触发属性不存在的报错__str__魔法方法要求返回字符串类型的结果,不能在方法内部直接调用print()输出内容,应该直接返回格式化后的字符串。
错误的原代码:
修正后的代码:def __str__(self): print("Şarkı ismi: {}\nSanatçı: {}\nAlbüm: {}\nProdüksiyon şirketi:{}\nŞarkı süresi(saniye): {}").format(self.isim, self.sanatçı, self.albüm, self.prodüksiyon_şirketi, self.şarkı_süresi)def __str__(self): return "Şarkı ismi: {}\nSanatçı: {}\nAlbüm: {}\nProdüksiyon şirketi:{}\nŞarkı süresi(saniye): {}".format(self.isim, self.sanatçı, self.albüm, self.prodüksiyon_şirketi, self.şarkı_süresi) - 数据库锁定:有两处原因共同导致:
- 你的代码全程没有主动调用
bağlantıyı_kes()方法关闭数据库连接,且该方法本身存在语法错误:self.bağlantı.close后面缺少调用括号,即使调用该方法也无法真正关闭连接释放锁 - 前面的
__str__方法抛出未处理的异常,导致程序提前终止,数据库连接没有被正常释放,sqlite的文件级锁持续持有,就会触发数据库锁定的报错。
- 你的代码全程没有主动调用
内容的提问来源于stack exchange,提问作者V0LzEn0r
相关产品推荐
相关产品推荐

