TypeError: bad operand type for unary +: 'str'

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
onkel.paul
User
Beiträge: 2
Registriert: Freitag 8. August 2014, 22:44

Liebe Python-Gemeinde, :shock:
Ich bin ein Pythonneuling und habe versucht für meinen Ras.Pi. eine Wetterstation aus den verschiedensten Quellen zusammen zufummeln! :?
Nun habe ich ein Lieber Problem bei dem ich ohne eure Hilfe nicht weiter kommen werde. :!:

Ich bekomme diese Fehlermeldung:

Code: Alles auswählen

 pi@raspberrypi ~/project  $ sudo python readsensors.py
Traceback (most recent call last):
  File "readsensors.py", line 159, in <module>
    writeHTML(tempExt, tempInt, humid, press)
  File "readsensors.py", line 142, in writeHTML
    curr.write(+str(vNow)+';'+str(round(to,1))+';'+str(ti)+';'++str(round(pa,1))+';'+str(hu)+'\n')
TypeError: bad operand type for unary +: 'str'
Ursächlich ist wohl das, aber was?:
Zeile 2 ist 142

Code: Alles auswählen

 curr = open("/home/pi/project/web/current.txt", "w")
    curr.write(+str(vNow)+';'+str(round(to,1))+';'+str(ti)+';'++str(round(pa,1))+';'+str(hu)+'\n')
    curr.close()

#------------------------------------------------------------------------
# Main program
#------------------------------------------------------------------------

tempExt = readDS18B20()
humid = readDHT11()
tempInt, press = readBMP()

#write to RRD archive
cmd = '/usr/bin/rrdtool update /home/pi/project/weatherRRD.rrd -t tempo:tempi:press:humid N:'
cmd = cmd +str(tempExt)+':'+str(tempInt)+':'+str(Press)+':'+str(humid)
cmdStat, cmdOut = commands.getstatusoutput(cmd)
dbgprint("RRD write result: "+str(cmdStat))

writeHTML(tempExt, tempInt, humid, press )

dbgprint ("End!")
Wer schön wenn mir jemand tatkräftig helfen könnte!! :lol:
mit Besten Dank vom Onkel Paul
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Die Fehlermeldung ist da eigentlich recht deutlich: Das unäre Plus ist vor einem String nicht zulässig.

Code: Alles auswählen

>>> +"spam"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for unary +: 'str'
Strings solltest du übrigens nicht mit + zusammensetzen, sondern mit den dazugehörigen Methoden. Dann ist das ganze auch noch besser lesbar. Such einfach in der Dokumentation mal nach String Formatting.
Das Leben ist wie ein Tennisball.
onkel.paul
User
Beiträge: 2
Registriert: Freitag 8. August 2014, 22:44

EyDu hat geschrieben:Hallo und willkommen im Forum!

Die Fehlermeldung ist da eigentlich recht deutlich: Das unäre Plus ist vor einem String nicht zulässig.

Code: Alles auswählen

>>> +"spam"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for unary +: 'str'
Strings solltest du übrigens nicht mit + zusammensetzen, sondern mit den dazugehörigen Methoden. Dann ist das ganze auch noch besser lesbar. Such einfach in der Dokumentation mal nach String Formatting.
Danke für Deine Antwort EyDu, aber geholfen hat mir das wenig!
Kannst du genauer werden und mir evtl. Helfen die Zeilen abzuändern?
mit Besten Dank vom Onkel Paul
BlackJack

@onkel.paul: In der Python-Dokumentation gibt es ein Tutorial und für absolute Programmieranfänger wird Learn Python The Hard Way oft empfohlen (nicht vom Titel irritieren lassen ;-)).
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

onkel.paul hat geschrieben:

Code: Alles auswählen

 pi@raspberrypi ~/project  $ sudo python readsensors.py
Traceback (most recent call last):
  File "readsensors.py", line 159, in <module>
    writeHTML(tempExt, tempInt, humid, press)
  File "readsensors.py", line 142, in writeHTML
    curr.write(+str(vNow)+';'+str(round(to,1))+';'+str(ti)+';'++str(round(pa,1))+';'+str(hu)+'\n')
TypeError: bad operand type for unary +: 'str'
Ursächlich ist wohl das, aber was?:
Zeile 2 ist 142
Tracebacks zu verstehen ist für Anfänger IMHO nicht leicht. Aber du hast das schon richtig erkannt. Es ist die Zeile 142...
Der Fehler ist das erste plus in: curr.write(+str(vNow)...)
Sollte klar sein, das es so keinen Sinn macht :-)

Ansonsten sehe ich da auch zwei ++ Zeichen in der selben Zeile :-)

Aber wie schon geschrieben wurde, besser string formating nutzten.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten