2014-12-03 16 views
19

Ich habe 2 APIs. Ich hole Daten von ihnen. Ich möchte bestimmte Codeteile String zuweisen, so dass das Leben während des Codierens einfacher wurde. Hier ist der Code:TypeError: Coercing nach Unicode: brauche String oder Puffer, Int gefunden

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 

Im Ergebnis erhalte ich:

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

Können Sie die vollständige Traceback einschließen? – selllikesybok

+0

Sure: ' Traceback (jüngste Aufforderung zuletzt): Datei "C: /Users/gnite_000/Desktop/test.py", Zeile 25, in Name + "'s Zinsen -" + interestPayable Typeerror: Erzwingen auf Unicode: brauche String oder Puffer, int gefunden ' –

+0

Warum machen Sie all diese' name + 'Zinsen empfänglich -' + 'Aussagen? Sie werden in Ihrem aktuellen Code weggeworfen. – selllikesybok

Antwort

26

Das Problem könnte mit der Tatsache zu tun, dass Sie Ints hinzufügen hier, um die Saiten

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 

Soweit Wie ich weiß, kann der Interpret nicht implizit ein int in eine Zeichenkette konvertieren. Dies könnte funktionieren, aber

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

auf dem Python Ich gehe davon aus> 3,0

+0

Wenn ich int() entfernen würde, würde ich den gleichen Fehler bekommen, aber anstelle von gefunden, würde ich Float gefunden finden –

+0

@MarksGniteckis ja, weil in dem serialisierten Objekt die Daten, auf die Sie zeigen, ein Float, keine Zeichenfolge ist . Sie konvertieren es in ein int und fügen es dann zu einem String hinzu. Weder float noch int können der Zeichenfolge hinzugefügt werden. Wickeln Sie sie einfach in str(), wie '+ str (interestPayable)'. – selllikesybok

+0

Okay, fügte dem Problem eine andere Lösung hinzu. Welcher Selllikesybok hat darüber gesprochen. – TravelingMaker

2

Sie haben '% s' % und() hinzufügen, um jede Zeile wie folgt aus:

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

Das hat nicht für mich funktioniert. – FredFury

Verwandte Themen