Slecht operandtype voor unaire +: ‘str’

Ik kom er niet achter welk probleem ik heb met code die is geschreven in Python 2.7. Ik converteer de verwijzingen naar ints, maar ik krijg steeds een type-uitzondering bad operand type for unary +: 'str'. Kan iemand helpen?

import urllib2
import time
import datetime
stocksToPull = 'EBAY', 'AAPL'
def pullData(stock):
    try:
        print 'Currently pulling', stock
        print str(datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'))
        urlToVisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/' + \
            stock + '/chartdata;type=quote;range=3y/csv'
        saveFileLine = stock + '.txt'
        try:
            readExistingData = open(saveFileLine, 'r').read()
            splitExisting = readExistingData.split('\n')
            mostRecentLine = splitExisting[-2]
            lastUnix = mostRecentLine.split(',')[0]
        except Exception, e:
            print str(e)
            time.sleep(1)
            lastUnix = 0
        saveFile = open(saveFileLine, 'a')
        sourceCode = urllib2.urlopen(urlToVisit).read()
        splitSource = sourceCode.split('\n')
        for eachLine in splitSource:
            if 'values' not in eachLine:
                splitLine = eachLine.split(',')
                if len(splitLine) == 6:
                    if int(splitLine[0]) > int(lastUnix):
                        lineToWrite = eachLine + '\n'
                        saveFile.write(lineToWrite)
        saveFile.close()
        print 'Pulled', + stock
        print 'Sleeping....'
        print str(datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'))
        time.sleep(120)
    except Exception, e:
        print 'main loop', str(e)
for eachStock in stocksToPull:
    pullData(eachStock)

Ik krijg de operand-uitzondering bad operand type for unary +: 'str' wanneer het bij if int(splitLine[0]) > int(lastUnix): hoewel beide waarden die worden vergeleken, worden afgedrukt als ints wanneer ze worden getest. kan iemand mij wat feedback geven? bedankt!

hier is de uitzonderingsreactie:

Currently pulling EBAY
2013-12-21 11:32:40
Pulled main loop bad operand type for unary +: 'str'
Currently pulling AAPL
2013-12-21 11:32:41
Pulled main loop bad operand type for unary +: 'str'`

Antwoord 1, autoriteit 100%

U zegt dat if int(splitLine[0]) > int(lastUnix): veroorzaakt de problemen, maar je laat eigenlijk niets zien dat dat suggereert.
Ik denk dat deze regel het probleem is:

print 'Pulled', + stock

Begrijp je waarom deze regel die foutmelding kan veroorzaken? U wilt ofwel

>>> stock = "AAAA"
>>> print 'Pulled', stock
Pulled AAAA

of

>>> print 'Pulled ' + stock
Pulled AAAA

niet

>>> print 'Pulled', + stock
PulledTraceback (most recent call last):
  File "<ipython-input-5-7c26bb268609>", line 1, in <module>
    print 'Pulled', + stock
TypeError: bad operand type for unary +: 'str'

Je vraagt ​​Python om het + symbool toe te passen op een string zoals +23 maakt een positieve 23, en ze maakt bezwaar.


Antwoord 2, autoriteit 21%

De code werkt voor mij. (na toevoeging van ontbrekende except-clausule / import-instructies)

Heb je \ in de originele code gezet?

urlToVisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/' \
              + stock + '/chartdata;type=quote;range=5d/csv'

Als u het weglaat, kan dit een oorzaak van de uitzondering zijn:

>>> stock = 'GOOG'
>>> urlToVisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/'
>>> + stock + '/chartdata;type=quote;range=5d/csv'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for unary +: 'str'

BTW, string(e) moet str(e) zijn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes