Kezdőoldal » Számítástechnika » Programozás » Pythonban kéne egy kis segítség?

Pythonban kéne egy kis segítség?

Figyelt kérdés

Itt van a kód:

[link]


És itt van a hiba:

[link]


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?



2021. júl. 25. 19:01
1 2
 1/20 HaBB_00 ***** válasza:

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

2021. júl. 25. 20:14
Hasznos számodra ez a válasz?
 2/20 HaBB_00 ***** válasza:
Á, és a while ciklus a class-on belül van. Broken. Egy behúzással több, mint kellene:)
2021. júl. 25. 20:22
Hasznos számodra ez a válasz?
 3/20 A kérdező kommentje:

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.


[link]

2021. júl. 25. 20:58
 4/20 A kérdező kommentje:

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?

2021. júl. 25. 20:59
 5/20 A kérdező kommentje:
*Miután elküldtem a választ rájöttem hogy a json.loads()-ot nem írtam át eval()-ra, ezt közben kijavítottam. A Client()-ből pedig az objectet kiszedtem
2021. júl. 25. 21:02
 6/20 HaBB_00 ***** válasza:

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

2021. júl. 25. 21:24
Hasznos számodra ez a válasz?
 7/20 HaBB_00 ***** válasza:
Ja, utóbbiak stimmelnek, sorry
2021. júl. 25. 21:24
Hasznos számodra ez a válasz?
 8/20 HaBB_00 ***** válasza:

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

2021. júl. 25. 21:27
Hasznos számodra ez a válasz?
 9/20 A kérdező kommentje:

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:

[link]


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?

2021. júl. 25. 21:53
 10/20 HaBB_00 ***** válasza:

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

2021. júl. 25. 23:23
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!