2017-03-29 32 views
2

我正在与下面的代码行的问题:两个彩车抛出类型错误:不支持的操作数类型(S)为+:“浮动”和“STR”

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

原始值拉来自ugLineList是字符串,我尝试在添加之前将它们转换为浮点数。即使我尝试类型转换他们我收到以下错误:

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

我已经试过这类型语句之前铸造他们,并检查该代码段是真正的浮动: print type(float(ugLineList[21])*1000), type(float(ugLineList[24])) - - ><type 'float'> <type 'float'>

我,什么是怎么回事,所以任何帮助感激真的很困惑。

谢谢!

+1

你的代码最终是float + str + float。 str是“+”或“ - ”。你为什么要加'+'或' - '? – FamousJameous

+1

这两个号码被转换为浮动,但它们之间的操作是一个字符串(即'“+”'或''-'')。您可能要重新制定了'if'语句,以便您专门检查'ugLineList [24]'为标志,然后通过明确使用正确的算术运算符做正确的操作。 – rayryeng

+0

我有一种感觉,它是与if语句,类型转换,做术前检查标志工作的问题。事后看来,我不确定为什么我添加了添加或减少每个Alg_D答案的条件。感谢大家! – lewis2ba

回答

2

上述评论(要添加字符串“+”或 - 取决于ugLineList的值[24“” ])是完全正确的。假定你打算加上或减去

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

根据您的if语句的评价,你可以这样做:

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 

希望这有助于

1

看起来你有一个字符串,同时试图做一个aritmetic操作

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

'+'

你真的需要的条件? '+' if float(ugLineList[24]) >= 0.0

尝试哟投个人variales,并与他们无关的操作把之前所有在一行

1

我不知道你是什么试图通过检查价值的符号,然后执行,但我敢打赌,你可以简单地删除它:

underground['distributed_load_C'] = float(ugLineList[21])*1000 + float(ugLineList[24])*1000j 
相关问题