web-dev-qa-db-fra.com

TypeError: contraindre à Unicode: besoin chaîne ou tampon, int trouvé

J'ai 2 API. Je vais chercher les données d'eux. Je veux assigner des parties de code particulières à une chaîne pour que la vie soit plus facile pendant le codage. Voici le code:

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

En résultat je reçois:

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
25
Marks Gniteckis

Le problème peut avoir à voir avec le fait que vous ajoutez des ints aux chaînes ici

    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

Autant que je sache, l'interprète ne peut pas implicitement convertir un int en une chaîne. Cela pourrait fonctionner, cependant,

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

Sur lequel je suppose Python> 3.0

37
TravelingMaker

Vous devez ajouter '% s'% et () à chaque ligne, comme ceci:

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