2011-10-04 119 views
3

一个“$”类型错误:不支持的操作类型为 - :“海峡”和“海峡”

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' 

既然钱是整数,所以是组合,我不能解决这个问题..人可以帮助吗?

+1

你为什么要打印ID?你的意思是看类型(投资组合)? – DSM

+14

你的Python已经被分号怪物攻击了! –

+2

显然,Python不允许你从另一个字符串中减去一个字符串。 –

回答

5

moneyportfolio显然是字符串,因此将它们转换成整数:

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

由于错误信息中明确指出,两者都是字符串,铸有int(var)

注:

让我们看看我们能从错误消息decude:

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

>>> 16*"a" 
'aaaaaaaaaaaaaaaa' 

,显然你错过了,因为该错误消息告诉你,money被str作为以及张贴相关的代码。

1

我认为这里的问题是假设因为你已经初始化了整数值的变量,它们仍然是整数。 Python不以这种方式工作。与=分配值仅将名称绑定到该值,而不必关注类型。例如:

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

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

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; 
相关问题