Seite 1 von 1
ser.readline() Py3.x datentyp
Verfasst: Samstag 28. November 2009, 11:59
von luchs2a
Moin,
da ich ja der neue bin, kurz zu mir. Ich versuche seit gestern mich intensiev in python einzufinden, bisher betriebe ich nur rudimentäres C auf microcontrollern. Nun würde ich aber das ganze anders als mit nem Terminal an einen PC anbinden.
bisherige "Erfolge": Python 3.1 installiert, PySerial installiert. als lektüre hangle ich mich an galileo openbock "einstieg in Python 2.6" , diesem Forum und wiki.python-forum.de entlang.
so nun aber wollte ich simpler weise folgendes schreiben:
Code: Alles auswählen
import serial
print ("hallo welt")
ser = serial.Serial(0, 115200, timeout=20)
x = ser.read() # read one byte
print (x)
s = ser.read(10) # read up to ten bytes (timeout)
print (s)
line=ser.readline() # read a '\n' terminated line
print (line)
ser.close()
bei der line= .... Zeile wirft er mir den Fehler:
TypeError: Can't convert 'bytes' object to str implicitlclsy
Soweit ich mittlerweile verstehe, liefert er mir einen byte string zurück aus ascii zeichen, python 3.n hat einen neuen datentyp bytes eingeführt und betrachtet aber alles als strings in unicode. So, in C würde ich sagen casten, aber wie geht das hier??
mit lesen und suchen habe ich den gestrigen abend zu gebracht
auch der versuch, das so zu lösen:
Code: Alles auswählen
import serial
ser = serial.Serial(0, 115200, timeout=20)
x = ser.read() # read one byte
s = ser.read(10) # read up to ten bytes (timeout)
while s != '\n':
s = ser.read()
x = s + x
print(s)
print (x)
print (x)
ser.close()
endet nicht wie gewünscht weil ich irgendwie nicht in der lage bin, die while zu beenden (hab auch schon andere end geschichten versucht)
Ich hab wohl ein grundproblem damit, das python automatisch den wertetyp zuweist.
bis denn
Mischa
Re: ser.readline() Py3.x datentyp
Verfasst: Samstag 28. November 2009, 12:18
von ms4py
luchs2a hat geschrieben:Soweit ich mittlerweile verstehe, liefert er mir einen byte string zurück aus ascii zeichen, python 3.n hat einen neuen datentyp bytes eingeführt und betrachtet aber alles als strings in unicode. So, in C würde ich sagen casten, aber wie geht das hier??
Das OpenBook von Galileo ist außerdem Schrott:
http://bj.spline.de/python_openbook.html
Zum Einstieg in Python ist "A Byte of Python" relativ gut geeignet.
Verfasst: Samstag 28. November 2009, 14:10
von luchs2a
hi,
danke für deine Antwort wenn ich demnach
str(line)=ser.readline()
einfüge bekomme ich ein.
SyntaxError: can't assign to function call
leider sind meine fähigkeiten derart rudimentär das ich das wohl noch nicht so recht umsetzen kann
mischa
edit:
(hast du zufälliger weise auser nem buchverriss noch eine empfehlung für ein buch in deutsch ?) a byte of pythonis ja deutsch ups der titel ward so englisch
mein ziel ist es, wie schon umrissen daten seriell zu empfangen und dann in einem gui darzustellen. sowohl als zahlenwerte als auch als einfache graphen
Verfasst: Samstag 28. November 2009, 14:25
von numerix
luchs2a hat geschrieben:wenn ich demnach
str(line)=ser.readline()
einfüge bekomme ich ein.
SyntaxError: can't assign to function call
Ich empfehle dringend, dein Ziel erst einmal zurückzustellen, die ersten Kapitel des Python-Tutorials durchzuarbeiten, viel zu experimentieren und kleine Progrämmchen zu schreiben, und dir Zeit zu lassen, bevor du dann auch noch mit GUI-Programmierung beginnst.
Verfasst: Samstag 28. November 2009, 14:27
von luchs2a
hi,
ich danke dir für deine empfehlung sie entspricht auch dem was ich vor habe . ich wollte blos gleich mein ziel mit abliefern.
mit dem lesen bin ich eh dabei aber hin und wieder ein Erfolg wäre schön und nicht 6h lang stochern.
mischa
Verfasst: Samstag 28. November 2009, 16:51
von Dav1d
Verfasst: Samstag 28. November 2009, 17:38
von numerix
Verfasst: Samstag 28. November 2009, 17:41
von Dav1d
numerix hat geschrieben:
Sicher nicht.
Stimmt

, nicht genau genug gelesen
Re: ser.readline() Py3.x datentyp
Verfasst: Samstag 28. November 2009, 18:02
von Darii
luchs2a hat geschrieben:bei der line= .... Zeile wirft er mir den Fehler:
TypeError: Can't convert 'bytes' object to str implicitlclsy
Bist du sicher das genau das den Fehler verursacht? Bitte komplette Fehlermeldung + Traceback. Ansonsten könnte es auch sein, dass pyserial da einen Bug hat, versuch mal ser.readline(eol=b"\n") statt ser.readline().
Verfasst: Samstag 28. November 2009, 18:27
von luchs2a
hi,
öhm ja, naja, also ich gebs zu, gestern abend hatte ich ja lange gespielt und war irgendwann so weit, das er sich im traceback immer auf meinen code bezogen hat. Heute morgen als ich den thread erstellt habe, hab ich blos noch fix den Fehler erzeugt, aber nicht mehr genau hin geschaut.
also hier vollständig die Ausgabe:
C:\Python31\projekte>test.py
hallo welt
b'\n'
b'\radcw: 352'
Traceback (most recent call last):
File "C:\Python31\projekte\test.py", line 16, in <module>
line = ser.readline() # read a '\n' terminated line
File "C:\Python31\lib\site-packages\serial\serialutil.py", line 422, in readli
ne
line += c # not very efficient but lines are usually not that long
TypeError: Can't convert 'bytes' object to str implicitly
scheint also so als wenn er sich auf das importierte modul bezieht.
Bei dem byte of.. bin ich bis auf das oop kapitel schon recht weit durch. Das oop hebe ich mir auf bis ichs brauche. Nur lesen und probieren um des probieren willens halte ich nicht für Zielführend. Ich mache lieber etwas wenn ich ne Aufgabe für habe. sonst is das so akademisch... .
fände ich natürlich seltsam wenn es an was fertigem liegt oder sollte ich tatsächlich derjenige sein der das zu ersten mal in der kombi nutzt ???
Mischa
Verfasst: Samstag 28. November 2009, 18:41
von Darii
luchs2a hat geschrieben:fände ich natürlich seltsam wenn es an was fertigem liegt oder sollte ich tatsächlich derjenige sein der das zu ersten mal in der kombi nutzt ???
Hast du meinen Vorschlag denn mal ausprobiert?
Verfasst: Samstag 28. November 2009, 19:02
von luchs2a
,
also das hatte ich vor lauter schreck das ich das falsche traceback nutze übergangen. tschuldigung.
auch mit
line = ser.readline(eol=b"\n")
selbe fehlermeldung selbes traceback
mischa
Verfasst: Samstag 28. November 2009, 19:34
von numerix
Wenn ich jetzt nicht irgendetwas übersehen habe, dann ist pyserial noch gar nicht fit gemacht für Python 3.x.
Irgendwo habe ich zwar die Behauptung des Gegenteils gelesen, aber alles, was zum Download angeboten wird, lässt den Schluss zu, dass pyserial noch nicht final an Python 3.x angepasst wurde.
Versuch es doch mal mit Python 2.6 und pyserial.
Verfasst: Samstag 28. November 2009, 20:01
von luchs2a
,
also ich hatte mich an
http://pyserial.sourceforge.net/pyseria ... quirements gehalten und auch eine pyserial-py3k-2.5-rc1.win32.exe herunter geladen. Daher dachte ich das wird schon passen und getestet sein.
wenn ich das 2.6 drauf ziehe muss ich da was besonderes beachten ??
wie zukunftssicher ist die 2.6 geschichte ?? (die informationslage is ja bedeutend besser)
Mischa
ps: das mit der 2.6 werde ich nichts desto trotz testen, nachher nach dem Abendbrot
Verfasst: Samstag 28. November 2009, 21:10
von luchs2a
,
so ich hab jetzt mal auf python 2.6 umgestellt mit pyserial 2.5 rc1 und siehe da alles läuft wie gewünscht.
schade da habe ich wohl an der falschen stelle gesucht und die angaben falsch interpretiert.
schade schade
Mischa
Verfasst: Samstag 28. November 2009, 22:38
von Leonidas
Ich würde da ggf. einen Bug an den Autor melden.
Verfasst: Sonntag 29. November 2009, 11:19
von luchs2a
moin,
ohm naja damit habe ich so meine problemchen.... . mit dem englisch steh ich ein wenig auf dem kriegsfuß (ich habs generell nich so mit schriftlichen sparachen wie man sicher meinen posts entnehmen kann).
zudem wäre es interessant ob das bei anderen nachvollziehbar ist oder ??
mischa