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

5

a'$'

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?你是想查看portfolio的类型吗? - DSM
19
你的Python受到了分号怪兽的攻击! - Steven Rumbalski
2
显然,Python不允许你从另一个字符串中减去一个字符串。 - Steven Rumbalski
+1 以抵消不必要的 -1。 - Steven Rumbalski
4个回答

6
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;

5

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

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

2
正如错误信息明确指出的那样,两者都是字符串类型,使用 int(var) 进行强制转换。
注意:
让我们从错误信息中推断出些什么: portfolio 必须是字符串(str)类型,这意味着 value 也是一个字符串。像这样:
>>> 16*"a"
'aaaaaaaaaaaaaaaa'

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


1

我认为这里的问题在于假设您已经使用整数值初始化变量,它们将保持为整数。但是Python并不是这样工作的。使用=赋值仅将名称绑定到值,而不会注意类型。例如:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接