• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
differenza python2 python3 output tra e

Differenza output tra Python2 e Python3
#1
Ho un problema al quale non so dare soluzioni.
Questo è il programma:
Codice:
import serial

def parseGPS(data):
    print ("raw:", data)
    if data[0:6] == "$GNGGA":
        s = data.split(",")
        if s[7] == '0':
            print "no satellite data available"
            return        
        time = s[1][0:2] + ":" + s[1][2:4] + ":" + s[1][4:6]
        lat = decode(s[2])
        dirLat = s[3]
        lon = decode(s[4])
        dirLon = s[5]
        alt = s[9] + " m"
        sat = s[7]
        print ("Time(UTC): %s-- Latitude: %s(%s)-- Longitude:%s(%s)\
-- Altitute:%s--(%s satellites)" %(time, lat, dirLat, lon, dirLon, alt, sat))

ser = serial.Serial(port="/dev/serial0", baudrate=9600, timeout=0.5)
while True:
    data = ser.readline()
    parseGPS(data)


Output con python2:
('raw:', '$GNGGA,110503.00,4603.89333,N,01314.66017,E,1,10,0.95,154.4,M,44.1,M,,*4E\r\n')
Time(UTC): 11:05:03-- Latitude: 46 deg 03.89333 min(N)-- Longitude:013 deg 14.66017 min(E)-- Altitute:154.4 m--(10 satellites)

Output con python3:
raw: b'$GNGGA,111238.00,4603.87495,N,01314.66244,E,1,08,1.38,114.1,M,44.1,M,,*4F\r\n'

Ho tolto il futile lasciando solo le parti che potrebbero interessare per capire il problema.
Con Python3 ho un output diverso (b'xxxxxxxxx') che non mi permette di entrare nel loop IF data[0:6] == "$GNGGA":
Perchè queste differenze e come posso ovviarle?
Potrei usare Python2 con cui funziona ma vorrei capire la questione.
Grazie ai volontari
Risposta
#2
Print in Python 3 è una funzione.
Mancano le parentesi al secondo print che quindi viene ignorato in Python 3

Inviato dal mio A0001 utilizzando Tapatalk
Risposta
#3
(10/02/2020, 21:56)Zzed Ha scritto: Print in Python 3 è una funzione.
Mancano le parentesi al secondo print che quindi viene ignorato in Python 3

Inviato dal mio A0001 utilizzando Tapatalk

Si, hai ragione, mancano le parentesi del secondo print ma non è quello il problema perchè proprio non c'è nessuna possibilità che venga riconosciuta la stringa del confronto del comando "IF".
Se confronti i due output vedrai che quello del quello del Python2 è regolarmente processato (ci sono i print funzionanti, al di la delle parentesi tonde aggiunte perchè non ho voluto modificare il programma per dimostrare che è lo stesso).
Invece quello del Python3 non riesce a controntare i primi 5 caratteri della stringa perche l'output si presenta con una informazione diversa, cioè:
output Python2: raw:$GNGGA,110503.00, ecc.
output Python3: raw: b'$GNGGA,110503.00, ecc.'
Risposta
#4
si, scusa ma dal cell non avevo notato la b
indica che il dato è codificato in byte esatti.
per toglierla puoi aggiungere decode
esempio
Codice:
print ("raw:", data.decode())
Risposta
#5
(10/02/2020, 23:29)Zzed Ha scritto: si, scusa ma dal cell non avevo notato la b
indica che il dato è codificato in byte esatti.
per toglierla puoi aggiungere decode
esempio
Codice:
print ("raw:", data.decode())

Eccezzionale (avrò esaggerato con le doppie?).

Era proprio la risposta che cercavo.
Dovrò mettermi più di impegno per capire queste differenze leggendo i manuali. Al momento non sono abbastanza capace...... ma posso migliorare.

Grazie Zzed per la tua illuminazione
Risposta
#6
Di nulla, qui qualche indicazione in merito.
Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect