TypeError:不支持的操作数类型 - :'str'和'str'

时间:2011-10-04 20:03:18

标签: python

一个 '$'

money=1000000;
portfolio=0;
value=0;
value=(yahoostock.get_price('RIL.BO'));
portfolio=(16*(value));
print id(portfolio);
print id(value);
money= (money-portfolio);
'''

我收到错误:

Traceback (most recent call last):
  File "/home/dee/dee.py", line 12, in <module>
    money= (value-portfolio);
TypeError: unsupported operand type(s) for -: 'str' and 'str'

由于货币是整数,投资组合也是如此,我无法解决这个问题。任何人都可以帮忙???

4 个答案:

答案 0 :(得分:5)

moneyportfolio显然是字符串,因此将其转换为整数:

money= int( float(money)-float(portfolio) )

答案 1 :(得分:5)

value=(yahoostock.get_price('RIL.BO'));

显然返回一个字符串而不是一个数字。将其转换为数字:

value=int(yahoostock.get_price('RIL.BO'));

此外,信噪比也不是很高。你有很多(,)和;你不需要。您只分配变量以在下一行替换它们。您可以使代码更好:

money = 1000000
value = int(yahoostock.get_price('RIL.BO'));
portfolio = 16 * value;
print id(portfolio);
print id(value);
money -= portfolio;

答案 2 :(得分:2)

正如错误消息明确指出的那样,两者都是字符串,使用int(var)进行投射。

注意:

让我们看看我们可以从错误消息中解除什么:

portfolio必须是字符串(str),这意味着value也是一个字符串。像这样:

>>> 16*"a"
'aaaaaaaaaaaaaaaa'

显然您错过了发布相关代码,因为错误消息告诉您money也是str。

答案 3 :(得分:1)

我认为这里的问题是假设因为你用整数值初始化变量,它们将保持为整数。 Python无法以这种方式工作。使用=分配值仅将名称绑定到值,而不关注类型。例如:

a = 1       # a is an int
a = "Spam!" # a is now a str

我认为yahoostock.getprice()与许多从网站获取数据的函数一样,返回一个字符串。在进行数学计算之前,您需要使用int()进行转换。