Seite 1 von 1

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

Verfasst: Freitag 8. August 2014, 23:29
von onkel.paul
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:

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

Verfasst: Freitag 8. August 2014, 23:45
von EyDu
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.

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

Verfasst: Samstag 9. August 2014, 00:04
von onkel.paul
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?

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

Verfasst: Samstag 9. August 2014, 07:06
von 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 ;-)).

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

Verfasst: Samstag 9. August 2014, 08:11
von jens
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.