【问题标题】:TypeError: unsupported operand type(s) for -: 'str' and 'str'TypeError: 不支持的操作数类型 -: 'str' 和 'str'
【发布时间】:2011-10-04 20:03:18
【问题描述】:

一个'$'

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'

既然钱是整数,投资组合也是,我无法解决这个问题..任何人都可以帮忙???

【问题讨论】:

  • 为什么要打印 ID?您的意思是查看类型(投资组合)吗?
  • 你的蟒蛇被分号怪物攻击了!
  • 显然,Python 不允许你从另一个字符串中减去一个字符串。
  • +1 抵消不必要的 -1。

标签: python


【解决方案1】:
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】:

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

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

    【讨论】:

      【解决方案3】:

      正如错误消息明确指出的那样,两者都是字符串,使用int(var) 强制转换。

      注意:

      让我们看看我们可以从错误消息中推断出什么:

      portfolio必须是字符串(str),也就是说value也是字符串。像这样:

      >>> 16*"a"
      'aaaaaaaaaaaaaaaa'
      

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2013-02-20
          • 2018-12-06
          • 2021-01-03
          • 2018-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多