Permalänk

Python TypeError hjälp

Så jag försöket att få ett custom bibliotek att fungera. Men får type error och vet inte varför "TypeError: vars() argument must have __dict__ attribute".

Jag bör få ett object som svar, men vet inte vad felet är, google gav inga svar. Då det är ett eget tillverkat bibliotek så finns det ingen information där, och hitta inget om vad felmeddelandet vill.

JI_USER.search_exact_match_id(ID) # static search_exact_match_id(jindra_library, id=None)

Jag ska bara skicka ett simpelt ID, så det ska inte vara fel där.

Permalänk
Medlem

Har du importerat allt du behöver?
Problemet uppstår av att den försöker returnera ett objekt men någonstans är det fel så den får tillbaka None och därmed finns ingen dict är min gissning.

Edit :
Det kan vara att du måste ge ett id som ett objekt med ett attribut?

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Datavetare

Den inbyggda funktionen vars() ger tillbaka en lista innehållande alla skrivbara attribut på ett "objekt".

Det kanske lite ologiska här är att ett Python "dictionary" är inte ett "objekt" i detta kontext, däremot är typer definierade med nyckelordet class det. Rent tekniskt måste det som skickar till vars() in ha attributet __dict__.

Så min gissning: har du skickat in ett Python "dictionary" när funktionen förväntar sig en instans av någon form av klass? (Det är sådana här problem som får mig att undvika dynamiskt typade språk som pesten...).

Råkade skriva dict() där det skulle vara vars()...
Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk

@Ferrat
Allt bör vara importerat korrekt.

JI_USER.get_item(ITEM) # static get_item(jindra_library, item, id=None)

Jag lyckas hämta informationen om jag vet item.

item är vad databasen kallar den för, så ingen sökning behövs.
id är namnet, så en sökning krävs för att hitta rätt item.

Permalänk
Medlem
Skrivet av Frejoh466:

@Ferrat
Allt bör vara importerat korrekt.

JI_USER.get_item(ITEM) # static get_item(jindra_library, item, id=None)

Jag lyckas hämta informationen om jag vet item.

item är vad databasen kallar den för, så ingen sökning behövs.
id är namnet, så en sökning krävs för att hitta rätt item.

Men det där är ju en annan funktion?
Är item ett objekt? Om så, är du säker på att det inte är ett item.id eller liknande du måste använda för sökning?

Har du kollat i biblioteket vad som sker vid search?

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk

@Ferrat
Jag tror att du kanske har rätt. Jag lyckades göra en sökning, tror jag. Fick "[]" som svar, men inget felmeddelande (sökningen är fel då jag skickar en massa saker som inte ska returnera ett svar). Men jag vet inte riktigt vad "LIST" är.

OBJECT = JI_USER.get_item('ITEM') LIST = OBJECT.__dict__ TEST = JI_USER.search_exact_match_id(LIST) print(TEST)

OBJECT är ett objekt, så, "print(OBJECT.id)" ger id. Och "print(LIST)" ger allt. Så jag vill göra "LIST.id" men det är inget objekt, så det går inte (OBJECT.id ger samma fel, TypeError).

"print(vars(OBJECT))" är samma som "print(LIST)", medans "LIST" går att göra en sökning på, men sökningen tar inte en string eller OBJECT.id

Aldrig använt objekt, dict, etc. Så jag vet inte riktigt vad "LIST" är om inte en sträng.

Permalänk
Medlem

@Frejoh466:

LIST är väl precis det du skrivit, dvs. OBJECT.__dict__ ? Alltså __dict__-attributet på returvärdet av JI_USER.get_item('ITEM')

edit:
Du borde kunna använda LIST['id'] för att få ut samma värde som du kan få genom OBJECT.id, men det är oklart vad det är du försöker åstadkomma.

Visa signatur

Kom-pa-TI-bilitet

Permalänk

@Teknocide

Vad jag försöker att göra är väldigt enkelt, att göra en sökning.

EDIT2:
Det fungerar om jag skapar det som en class och söker.

EDIT3:
Förstår dock inte hur man printar en lista som är ett objekt.

Om jag har ett vanlig objekt så fungerar dict,

ITEMS = OBJECT.__dict__ print(ITEMS)

Men nu har jag en lista, och jag lyckas inte printa den,

print(type(LIST)) print(LIST)

ger,
<class 'list'>
<jindralib.id.Id object at 0x00F89F50>

Men,

ITEMS = LIST.__dict__ print(ITEMS)

ger "AttributeError: 'list' object has no attribute '__dict__'" ska inte dict göra om objekt till läslig form?