Python Return funktioniert nicht

Revolution

Commodore
Registriert
März 2008
Beiträge
4.964
Hallo zusammen,

Ich hab ein Problem ich bekomme die Variable nicht in die andere Funktion und ich verstehe nicht was ich falsch mach ...

TypeError: mqtt() missing 1 required positional argument: 'mqttsend'

Python:
def readsensors():
  # read slave list from master 1
  file = open('/sys/devices/w1_bus_master1/w1_master_slaves')
  w1_slaves = file.readlines()
  file.close()
  temperaturliste = []

  # for each slave
  for line in w1_slaves:
    # get slave id
    w1_slave = line.split("\n")[0]
    # read temp from slave id
    file = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
    filecontent = file.read()
    file.close()
    # calc and show temp
    stringvalue = filecontent.split("\n")[1].split(" ")[9]
    temperature = float(stringvalue[2:]) / 1000
    temperaturliste.append(temperature)
   
  temp0 = str(temperaturliste[0])
  temp1 = str(temperaturliste[1])
  temp2 = str(temperaturliste[2])
  temp3 = str(temperaturliste[3])
  sep = str(",")
  mqttsend = "".join((temp0,sep,temp1,sep,temp2,sep,temp3))
  print(mqttsend)
  return mqttsend

def mqtt(mqttsend):
    mqttsend = readsensors()
    client = mqttClient.Client("Python")
    client.username_pw_set(user, password=password)
    client.on_connect= on_connect
    client.connect(broker_address, port=port)
    client.loop_start()
    while Connected != True:    #Wait for connection
        time.sleep(0.1)
    try:
        while True:
            print(mqttsend)
            value = (mqttsend)
            client.publish("test",value)

    except KeyboardInterrupt:

        client.disconnect()
        client.loop_stop()


mqtt()
 
Schau mal in Zeile 30. Deine Funktion erwartet ein Argument, du übergibst beim Aufruf aber keins, deshalb die Fehlermeldung. Mit Return hat das nichts zu tun.

Da du die variable in Zeile 31 eh überschreibst, kannst du einfach das Argument entfernen.
 
  • Gefällt mir
Reaktionen: Bonanca, SirKhan und ChrisStonehenge
Zeile 30, 31:

Entweder 31 löschen und mqttsent übergeben beim Aufruf (mqtt(readsensors()) oder mqttsent Parameter der Funktion entfernen (30: def mqtt():)
 
  • Gefällt mir
Reaktionen: ChrisStonehenge und OLF
Der will anscheinend eine Variable haben in der letzten Zeile - in der Klammer, die letzten endes dann mit dem String gefüllt wird, wenn ich da richtig durchsteige (hab aber nur mal hobbymäßig etwas python benutzt.
 
Ok vergiss Zeile 31... da soll nichts überschrieben werden....

Python:
def mqtt(mqtt(readsensors()):
    client = mqttClient.Client("Python")
    client.username_pw_set(user, password=password)
    client.on_connect= on_connect
    client.connect(broker_address, port=port)
    client.loop_start()
    while Connected != True:    #Wait for connection
        time.sleep(0.1)
    try:
        while True:
            print(mqttsend)
            value = (mqttsend)
            client.publish("test",value)

    except KeyboardInterrupt:

        client.disconnect()
        client.loop_stop()


mqtt()

Irgendwie verstehe ich das übergeben nicht so wie ich es jetzt geändert habe bekomme ich

def mqtt(mqtt(readsensors()):
^
SyntaxError: invalid syntax


zurück
 
Python:
def readsensors():
  # read slave list from master 1
  file = open('/sys/devices/w1_bus_master1/w1_master_slaves')
  w1_slaves = file.readlines()
  file.close()
  temperaturliste = []

  # for each slave
  for line in w1_slaves:
    # get slave id
    w1_slave = line.split("\n")[0]
    # read temp from slave id
    file = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
    filecontent = file.read()
    file.close()
    # calc and show temp
    stringvalue = filecontent.split("\n")[1].split(" ")[9]
    temperature = float(stringvalue[2:]) / 1000
    temperaturliste.append(temperature)
    #  print('%4.1f °C' % temperature)
  temp0 = str(temperaturliste[0])
  temp1 = str(temperaturliste[1])
  temp2 = str(temperaturliste[2])
  temp3 = str(temperaturliste[3])
  sep = str(",")
  mqttsend = "".join((temp0,sep,temp1,sep,temp2,sep,temp3))
  print(mqttsend)
  return mqttsend

def mqtt(mqttsend):
    mqttsend = readsensors()
    client = mqttClient.Client("Python")
    client.username_pw_set(user, password=password)
    client.on_connect= on_connect
    client.connect(broker_address, port=port)
    client.loop_start()
    while Connected != True:    #Wait for connection
        time.sleep(0.1)
    try:
        while True:
            print(mqttsend)
            value = (mqttsend)
            client.publish("test",value)

    except KeyboardInterrupt:

        client.disconnect()
        client.loop_stop()

mqqt(readsensors())


Hm leider nicht
Traceback (most recent call last):
mqqt(readsensors())
NameError: name 'mqqt' is not defined
 
Der Fehler passt nicht zu deinem Code, den du gepostet hast. Noch mal, einfach den Code aus dem Eingangspost nehmen (der lief ja schon fast) und nur die beiden Änderungen aus meinem letzten Post vornehmen.

Edit: Ja, mit dem kompletten Code macht’s Sinn. Sorry, da hatte ich ein q zu viel und ein t zu wenig. Zeile 50 ist mqtt(readsensors()).
 
Bin gerade nicht an meinem eigenen Rechner hab das gerade nur mit nano geschrieben.

Super danke läuft jetzt :)
 
  • Gefällt mir
Reaktionen: OLF

Ähnliche Themen

Antworten
21
Aufrufe
1.741
Zurück
Oben