Home > database >  Why do I get "AttributeError: 'NoneType' object has no attribute 'format'&q
Why do I get "AttributeError: 'NoneType' object has no attribute 'format'&q

Time:09-22

I am running this code to create a table and print its components.

import Proje_2

şarkı_listesi = Proje_2.Şarkı_listesi()

isim = input("İsim:")
sanatçı = input("Sanatçı:")
albüm = input("Albüm:")
prodüksiyon_şirketi = input("Prodüksiyon şirketi:")
şarkı_süresi = int(input("Şarkı süresi(sn):"))
        
yeni_şarkı = Proje_2.Şarkı(isim, sanatçı, albüm, prodüksiyon_şirketi, şarkı_süresi)
        
print("Şarkı ekleniyor")
şarkı_listesi.şarkı_ekle(yeni_şarkı,)
        
print("Şarkı eklendi")

şarkı_listesi.şarkıları_göster()

Also this is the module I am using:

import sqlite3

class Şarkı():
    def __init__(self,isim,sanatçı,albüm,prodüksiyon_şirketi,şarkı_süresi):
        self.isim = isim
        self.sanatçı = sanatçı
        self.albüm = albüm
        self.prodüksiyon_şirketi = prodüksiyon_şirketi
        self.şarkı_süresi = şarkı_süresi
    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)

class Şarkı_listesi():
    def __init__(self):
        self.bağlantı_oluştur()
        
    def bağlantı_oluştur(self):
        self.bağlantı = sqlite3.connect("şarkı_listesi.db")
        self.cursor = self.bağlantı.cursor()
        
        sorgu = "Create Table if not exists şarkı_listesi (isim TEXT,sanatçı TEXT,albüm TEXT,prodüksiyon_şirketi TEXT,şarkı_süresi INT)"
        
        self.cursor.execute(sorgu)
        self.bağlantı.commit()
        
    def bağlantıyı_kes(self):
        self.bağlantı.close

    def şarkıları_göster(self):
        sorgu = "Select * from şarkı_listesi"
        şarkı_listesi = self.cursor.fetchall()
        self.cursor.execute(sorgu,)
        
        if (len(şarkı_listesi) == 0):
            print("Listenizde şarkı bulunmuyor")
            
        else:
            for i in şarkı_listesi:
                şarkı = Şarkı(i[0], i[1], i[2], i[3], i[4])
                print(şarkı)
                
    def şarkı_ekle(self,şarkı):
        sorgu = "Insert into şarkı_listesi Values(?,?,?,?,?)"
            
        self.cursor.execute(sorgu, (şarkı.isim,şarkı.sanatçı,şarkı.albüm,şarkı.prodüksiyon_şirketi,şarkı.şarkı_süresi))
        self.bağlantı.commit()

When I run the code, first it says "Listenizde şarkı blunmuyor" and if I add another "şarkı_listesi.şarkıları_göster()" function it says "AttributeError: 'NoneType' object has no attribute 'format'" then locks the database. Why?

CodePudding user response:

format() is a method on the str class. You've chained it to the output of print, which is always None. Move the call to format() inside the print statement to properly chain it to your string:

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))

CodePudding user response:

Change the print in the __str__ method to a return. The str method will format the output, and the print in şarkıları_göster will print it.

Aside: It says "Listenizde şarkı blunmuyor"` the first time because the fetchall() is before the execute(). I'm not sure if that was part of the "Why?"

  • Related