2014-12-03 26 views
19

Mam 2 interfejsy API. Pobieram z nich dane. Chcę przypisać określone części kodu do łańcucha, aby życie stało się łatwiejsze podczas kodowania. Oto kod:TypeError: wymuszanie na Unicode: potrzebny ciąg lub bufor, int znaleziony

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 

W rezultacie otrzymuję:

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 
+0

Czy możesz podać pełne informacje zwrotne? – selllikesybok

+0

Sure: ' Traceback (najnowsza wezwanie ostatni): pliku "C: /Users/gnite_000/Desktop/test.py", linia 25, w nazwa + "'s odsetki płatne -" + interestPayable TypeError: wymuszanie na Unicode: potrzebujesz łańcucha lub bufora, int found ' –

+0

Dlaczego robisz wszystkie te" name + "odsetki do otrzymania - instrukcje" + "? Zostaną wyrzuceni w twoim aktualnym kodzie. – selllikesybok

Odpowiedz

26

Problem może mieć do czynienia z faktem, że dodajesz ints do struny tutaj

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 

Jak daleko jak jestem świadomy, interpretator nie może niejawnie konwertować int na ciąg znaków. To może działać, choć

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

Na którym ja zakładając Python> 3,0

+0

Gdybym usunął int(), otrzymywałbym ten sam błąd, ale zamiast w znalezionym, dostałbym float znaleziony –

+0

@MarksGniteckis tak, ponieważ w serializowanym obiekcie dane, które wskazujesz, są zmiennopozycyjne, a nie ciąg . Konwertujesz go na int, a następnie dodajesz do łańcucha. Ani float, ani int nie można dodać do łańcucha. Po prostu umieść je w str(), jak '+ str (interestPayable)'. – selllikesybok

+0

OK, dodałem inne rozwiązanie problemu. O czym mówił selllikesybok. – TravelingMaker

2

Trzeba dodać '% s' % i() na każdej linii, na przykład:

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

To nie działa dla mnie. – FredFury

Powiązane problemy