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
 11/20 A kérdező kommentje:

"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?

[link]

2021. júl. 25. 23:41
 12/20 HaBB_00 ***** válasza:

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.

2021. júl. 26. 11:47
Hasznos számodra ez a válasz?
 13/20 HaBB_00 ***** válasza:

É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.

2021. júl. 26. 11:49
Hasznos számodra ez a válasz?
 14/20 HaBB_00 ***** válasza:

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

2021. júl. 26. 13:02
Hasznos számodra ez a válasz?
 15/20 HaBB_00 ***** válasza:

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

2021. júl. 26. 13:04
Hasznos számodra ez a válasz?
 16/20 A kérdező kommentje:

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

2021. júl. 26. 14:24
 17/20 HaBB_00 ***** válasza:

Így értem:)

Jó helyre raktad

Érdekes...

Működik egyébként?

2021. júl. 26. 15:17
Hasznos számodra ez a válasz?
 18/20 anonim ***** válasza:
50%

"(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]

2021. júl. 26. 15:52
Hasznos számodra ez a válasz?
 19/20 HaBB_00 ***** válasza:

#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

2021. júl. 26. 18:23
Hasznos számodra ez a válasz?
 20/20 anonim ***** válasza:
50%

@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.

2021. júl. 26. 18:44
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!