2017-03-29 4 views
2

ich mit der folgenden Codezeile in ein Problem leite:Zwei Schwimmer werfen Typeerror: nicht unterstützte Operandtyp (e) für +: ‚float‘ und ‚str‘

underground['distributed_load_C'] = float(ugLineList[21])*1000 + ('+' if float(ugLineList[24]) >= 0.0 else '-') + abs(float(ugLineList[24]))*1000j

Die ursprünglichen Werte gezogen von ugLineList sind Strings und ich versuche sie vor dem Hinzufügen in floats zu schreiben. Auch wenn ich versuche, sie zu geben warf ich die folgende Störung erhalte:

TypeError: unsupported operand type(s) for +: 'float' and 'str'

Ich habe versucht Typ sie vor dieser Aussage Gießen und prüfen, ob die Code-Schnipsel sind wirklich schwimmt: print type(float(ugLineList[21])*1000), type(float(ugLineList[24])) - -><type 'float'> <type 'float'>

Ich bin wirklich verwirrt, was hier vorgeht, so dass jede Hilfe sehr geschätzt wird.

Danke !!

+1

Ihr Code endet als float + str + float. Die str ist entweder '+' oder '-'. Warum fügst du '+' oder '-' hinzu? – FamousJameous

+1

Die beiden Zahlen werden in Float umgewandelt, aber die Operation zwischen ihnen ist eine Zeichenfolge (d. H. "+" Oder "-"). Sie sollten die 'if' -Anweisung neu formulieren, so dass Sie' ugLineList [24] 'speziell für das Zeichen überprüfen, und dann die richtige Operation ausführen, indem Sie explizit den richtigen arithmetischen Operator verwenden. – rayryeng

+0

Ich hatte das Gefühl, es war ein Problem mit der if-Anweisung, der Typumwandlung und der Überprüfung des Zeichens, bevor die Operation ausgeführt wurde. Im Nachhinein bin ich mir nicht sicher, warum ich die Bedingung für das Hinzufügen oder Subtrahieren per Alg_D's Antwort hinzugefügt habe. Danke allen! – lewis2ba

Antwort

2

Der Kommentar über (den Sie hinzufügen, die Zeichenfolge ‚+‘ oder ‚-‘ auf den Wert von ugLineList abhängig [24 ]) ist genau richtig. Angenommen, Sie beabsichtigen

abs(float(ugLineList[24]))*1000j 

basierend auf der Auswertung Ihrer if-Anweisung zu addieren oder subtrahieren, können Sie etwas tun könnte, wie:

res = float(ugLineList[21])*1000 
if float(ugLineList[24]) >= 0.0: 
    res += abs(float(ugLineList[24]))*1000j 
else: 
    res -= abs(float(ugLineList[24]))*1000j 
underground['distributed_load_C'] = res 

Hoffnung diese

1

Es sieht aus wie Sie Strings haben, während versuchen, eine aritmetic Betrieb

+ ('+' if float(ugLineList[24]) >= 0.0 else '-') 

wie zu tun '+'

brauchen Sie wirklich die Bedingung? '+' if float(ugLineList[24]) >= 0.0

versuchen yo einzelne variales werfen und macht die Operationen mit ihnen vor allem in einer Zeile setzen

1

hilft Ich bin nicht sicher, was du bist versuchen zu tun, indem Sie das Zeichen des Wertes und dann eine abs durchführen, aber ich würde wetten, dass Sie es einfach fallen lassen können:

underground['distributed_load_C'] = float(ugLineList[21])*1000 + float(ugLineList[24])*1000j 
Verwandte Themen