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?
"Illetve 1. a self.datát indexeld
2. így indexeld: self.data["data"]["status"] gondolom ez kell neked"
Ezt a részt nem teljesen értem. Pontosabban azt hogy ezt hogyan implementáljam.
Így érted?
Uhh, asszem már fáradt lehettem, bocsesz.
Ezt akartam írni: client.data["data"]["status"]
Akikor kiíratod.
A self véletlen.
A self.data = json.loads(self.raw_data) jó volt.
És az előző verzióban a client.raw_datát irattad ki indexelve, aminek nincs értelme, mert épp, hogy a data az átalakított cucc, a dictionary.
A raw_data csak egy string.
A 9-es üzenetben írt hibádra azt hiszem ez lesz a megoldás:
A sima recv belerakja a stringbe a címet is (ez az a 14463). A recvfrom viszont egy tuple-lel tér vissza, aminek az első eleme az üzenet, a második pedig a cím.
És egyszerűen unpackeled:
self.raw_data, address = x.recvfrom(PACKET_SIZE).strip()
Basszus, hogy nem lehet szerkeszteni a válaszokat.
Ilyenkor már nem az x.recvfrom()-ra rakod a stripet
mert az egy tuple
hanem a self.raw_data-ra
self.raw_data = self.raw_data.strip()
Így érted? [link]
Nem teljesen világos hogy a self.raw_data = self.raw_data.strip() hova kéne kerüljön :/
Egyébként a Pylance (VS Code beépített funkciója) szerint az address-t a self.raw_data, address = x.recvfrom(PACKET_SIZE)-ban nem is használja (address is not accessed).
Így értem:)
Jó helyre raktad
Érdekes...
Működik egyébként?
"(address is not accessed)."
A VSCode vernyákol, hogy az address változót létrehozod, nem használod sehol. Ez egy nagyon hasznos IDE funkció, hogy az ember szép kódot írjon. Ezt a warningot el lehet kerülni az _ használatával, amit ilyen nem használt változókhoz használunk:
self.raw_data, _ = x.recvfrom(PACKET_SIZE)
Valahogy nekem nem intuitív, hogy ebben az esetben miért kellene a socket által küldött adatot eltárolni az objektumban. De, ha működik, OK. Én valami ilyesmit csinálnék: [link]
#18 jól nyomod
igazad van, az address-re gondolom nem volt szüksége a kérdezőnek sem. Az underscore-t eddig nem is használtam erre, ezentúl fogom:)
Ha megnézed a #9eset, a recv belerakja a stringbe az address-t is. Úgy persze, hogy nem tudja object-té konvertálni.
Ezért javasoltam a recvfrom használatát
@19 Jaja, ez egy teljesen sztenderd módja változó kicsomagolásnak.
De nem teljesen világos, hogy miért nem volt itt jó a recv. De be kell valljam, még soha az életemben nem kellett még a socket könyvtárat használni. Nagyon kíváncsi vagyok, hogy ez milyen esetben indokolt.
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!