Pythonban kéne egy kis segítség?
Itt van a kód:
És itt van a hiba:
Egyszerűen nem értem mit rontok el.
Amit itt ugye csinálnék, hogy 2 másodpercenként lekérdezem JSON formájában az adatokat, és ezt deserialize-olom (nem tudom mi a magyar kifejezés), és szótárrá alakítom.
Van valakinek ötlete, hogyan tudnám ezt megjavítani?
Szia
Az "extra data" hibaüzenet alapján arra tippelek, hogy kapsz egy newline charactert, vagy vmi más vezérlőkódot.
Próbáld a data = data.strip() -et a kiolvasás után
Vagy próbáld eval()-lal, json.loads() helyett, az kb ugyanazt csinálja, hátha bejön.
(ezzel kapcsolatban: [link]
Egyébként meg ha már egy class-ban van, az Isten szerelmére, ne használj már globális változókat xd
Persze, gondolom megvan a szerepük
De meg tudod oldani nélküle is biztosan. Nagyon nem elegáns.
Egyszerűen self.data = ... meg self.raw_data = ...
és használhatod self.data-ként az osztályon belül
Ja és a függvényeidben nincs self argumentum. Gondolom ez lesz a következő hibaüzeneted, ha a mostani megoldódik
Eléggé kezdő vagyok, mint észrevehetted :) Nézd el a hibáimat, még tanulok :D
Először próbáltam osztályokat használni, szóval még annyira nem tudom mi hogy van. Köszi a tanácsokat!
Jelenleg így áll a kód, egy kicsit zavaros viszont az hogy a VS Code miért húzza alá a függvényeket.
Oh, buta én, meg is mondja mi a baja:
Traceback (most recent call last):
File "c:\Users\valak\Desktop\vtdiag\newclient.py", line 21, in <module>
receive_data()
NameError: name 'receive_data' is not defined
De nem tudom mi a megoldás. Segítenél, kérlek?
Na
Én se reagáltam mindenre
A Client-ből kiszedted az object-et ez jó.
Amúgy nagybetűvel írják, Object.
A Client classból csinálj egy objektumot, így:
client = Client()
Ezután a függvényeket így hívhatod meg:
client.receive_data(), stb.
A receive_datának nem kell data argumentum
A Client osztályban legyen egy __init__(self) függvény, vagyis konstruktor. Ebben deklaráld a data változót:
self.data = None (lehet más is a kezdőérték, úgy is megváltozik majd, de a None a legsemlegesebb ezért jó)
A receive_datán belül a self.datának adj értéket, és mindenhol máshol is az osztályban self.data-ként használd
Illetve a raw_datát is a konstruktorban deklaráld, aztán kint a ciklusban meg client.raw_data-ként használhatod, az objektumon keresztül
Amúgy rossz a névválasztás sztem, a data kellene h legyen a raw_data, és fordítva. Érted, miért
Ezer köszönet!
Csak hogy elkerüljem a félreértéseket, itt a kód, remélem sikerült mindent jól csináljak:
Most már csak egy hibát kapok:
Traceback (most recent call last):
File "c:\Users\valak\Desktop\vtdiag\newclient.py", line 27, in <module>
client.deserialize_data()
File "c:\Users\valak\Desktop\vtdiag\newclient.py", line 20, in deserialize_data
self.data = eval(self.raw_data)
File "<string>", line 1
((( Itt a büdösül hosszú JSON van, amit inkább külső oldalra szúrtam be: [link] )))
^
SyntaxError: invalid syntax
Gyanítom ez a JSON hibás formázása, de e-felett nincs kontrollom, mert egy harmadik fél által készült alkalmazás küldi. Van valami ötleted, hogy ezt hogyan oldjam meg?
Szóra sem érdemes:)
Na, lementettem a JSON-t, és kiderült, hogy mégis érdemes a json.loads()-ot használnod, mert a JSON-ban kis f-fel van a false, azt meg az eval() nem szereti
Illetve 1. a self.datát indexeld
2. így indexeld: self.data["data"]["status"] gondolom ez kell neked
Nézd meg a JSON-ban így van elraktározva, először a "data" indexű dictionary-hez kell hozzáférned, majd abban tovább indexelsz a "status"-ra
Ami a hibát illeti, látod ezt:
File "<string>", line 1
14463 {"data": {"s......
ott van az a 14463 a string elején, az zavar be. Azt szedd ki valahogyan
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!