类型错误:强制转换为Unicode格式需要字符串或缓冲区,但发现了整数。

29

我有两个API,正在从它们那里获取数据。我想将特定的代码部分分配给字符串,以便编码更加轻松。以下是代码:

import urllib2
import json

urlIncomeStatement = 'http://dev.c0l.in:8888'
apiIncomeStatement = urllib2.urlopen(urlIncomeStatement)
dataIncomeStatement = json.load(apiIncomeStatement)

urlFinancialPosition = 'http://dev.c0l.in:9999'
apiFinancialPosition = urllib2.urlopen(urlFinancialPosition)
dataFinancialPositiont = json.load(apiFinancialPosition)

for item in dataIncomeStatement:
    name = item['company']['name']
    interestPayable = int(item['company']['interest_payable'])
    interestReceivable = int(item['company']['interest_receivable'])
    sales = int(item['company']['interest_receivable'])
    expenses = int(item['company']['expenses'])
    openingStock = int(item['company']['opening_stock'])
    closingStock = int(item['company']['closing_stock'])
    sum1 = sales + expenses

    if item['sector'] == 'technology':
        name + "'s interest payable - " + interestPayable
        name + "'s interest receivable - " + interestReceivable
        name + "'s interest receivable - " + sales
        name + "'s interest receivable - " + expenses
        name + "'s interest receivable - " + openingStock
        name + "'s interest receivable - " + closingStock

print sum1

我得到的结果是:

Traceback (most recent call last):
  File "C:/Users/gnite_000/Desktop/test.py", line 25, in <module>
    name + "'s interest payable - " + interestPayable
TypeError: coercing to Unicode: need string or buffer, int found

你能包含完整的回溯吗? - selllikesybok
当然: 回溯(最近的调用最先显示): 文件“C:/ Users / gnite_000 / Desktop / test.py”,第25行,在<module>中: name +“的应付利息 -”+ interestPayable 类型错误:强制转换为Unicode:需要字符串或缓冲区,但发现int - Marks Gniteckis
为什么你在代码中写了这些 name + 's interest receivable - ' + 语句?它们在你当前的代码中被抛弃了。 - selllikesybok
2个回答

41

这个问题可能与你在这里将整数添加到字符串有关

    if item['sector'] == 'technology':
        name + "'s interest payable - " + interestPayable
        name + "'s interest receivable - " + interestReceivable
        name + "'s interest receivable - " + sales
        name + "'s interest receivable - " + expenses
        name + "'s interest receivable - " + openingStock
        name + "'s interest receivable - " + closingStock

据我所知,解释器无法将int隐式转换为string。不过这个方法可能可行:

       str(name) + "'s interest receivable - " + str(closingStock)

我假设正在使用 Python > 3.0


如果我去掉int(),我会得到相同的错误,但是不是找到in,而是找到float。 - Marks Gniteckis
1
@MarksGniteckis 是的,因为在序列化对象中,您指向的数据是浮点数,而不是字符串。您将其转换为整数,然后添加到字符串中。既不能将浮点数也不能将整数添加到字符串中。只需使用str()将它们包装起来,例如 + str(interestPayable) - selllikesybok
好的,我为这个问题添加了一个不同的解决方案。这是selllikesybok所提到的。 - TravelingMaker
1
据我所知,解释器不能将int隐式转换为字符串,这不是一种限制,而是一种设计。 - bruno desthuilliers
正确的解决方案是使用字符串格式化(请参考您所使用的Python版本的精美Python手册)。 - bruno desthuilliers
Python 2.7 - 对于某些人来说,这似乎是更有说服力的方式。 将引号之间的所有内容包装起来,并用%s替换变量。“%s的应收利息 - %s”%(姓名, 期末库存) - ajaykools

1

您需要在每行中添加'%s' %和(),如下所示:

'%s' % (name + "'s interest payable - " + interestPayable)

试试这个。Python 2.7 - 对某些人来说,这似乎是更有说服力的方式。 将引号之间的所有内容包装起来,并用%s替换变量。" %s 的应收利息 - %s"%(姓名, 期末库存) - ajaykools
这个答案将导致相同的强制转换。建议根据@ajaykools在评论中提出的建议,将其更改为类似于“%s的应收利息 - %s” %(name,interestPayable)的内容。 - wihlke

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