Подтвердить что ты не робот

Плохой тип операнда для унарного +: 'str'

Я не могу понять проблему, которую я имею с кодом, написанным на Python 2.7. Я преобразовываю ссылки на ints, но я продолжаю получать тип bad operand type for unary +: 'str' типа исключения bad operand type for unary +: 'str'. Может ли кто-нибудь помочь?

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)

Я нажимаю на bad operand type for unary +: 'str' операнда исключений bad operand type for unary +: 'str' когда он получает, if int(splitLine[0]) > int(lastUnix): даже если оба значения сравниваются, распечатываются как ints при тестировании. может ли кто-нибудь дать мне некоторую обратную связь? Спасибо!

здесь есть ответ на исключение:

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''
4b9b3361

Ответ 1

Вы говорите, что if int(splitLine[0]) > int(lastUnix): вызывает проблемы, но вы на самом деле ничего не показываете, что наводит на это. Я думаю, что эта строка является проблемой:

print 'Pulled', + stock

Вы видите, почему эта строка может вызвать это сообщение об ошибке? Вы хотите либо

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

или

>>> print 'Pulled ' + stock
Pulled AAAA

не

>>> 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'

Вы просите Python применить символ + к строке, такой как +23 делает положительный 23, и она возражает.

Ответ 2

Код работает для меня. (после добавления отсутствующих инструкций except/import)

Вы положили \ в исходный код?

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

Если вы опустите его, это может стать причиной исключения:

>>> 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) должна быть str(e).

Ответ 3

p1go = p1go
p2go = p2go
file = open("score.txt", "w")
file.write("player one got", +str("p1go"),"\n")
file.write("player two got", +str("p2go"), ".")
file.close()

TypeError: bad operand type for unary +: 'str'

может кто-то мне помочь, это дает мне эту ошибку, я не вижу, что что-то не так