Je ne peux pas comprendre un problème que j'ai avec le code écrit en Python 2.7. Je convertis les références en ints, mais je reçois toujours une exception de type bad operand type for unary +: 'str'
. Quelqu'un peut-il aider ?
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)
Je frappe l'exception d'opérande bad operand type for unary +: 'str'
Quand il arrive à if int(splitLine[0]) > int(lastUnix):
même si les deux valeurs comparées s'impriment comme des entiers lors du test. quelqu'un peut-il me donner des commentaires? Je vous remercie!
voici la réponse d'exception:
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'`
Vous dites que if int(splitLine[0]) > int(lastUnix):
est à l'origine du problème, mais vous ne montrez en fait rien qui suggère cela. Je pense que cette ligne est le problème à la place:
print 'Pulled', + stock
Voyez-vous pourquoi cette ligne pourrait provoquer ce message d'erreur? Vous voulez soit
>>> stock = "AAAA"
>>> print 'Pulled', stock
Pulled AAAA
ou
>>> print 'Pulled ' + stock
Pulled AAAA
ne pas
>>> 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'
Vous demandez Python d'appliquer le +
symbole d'une chaîne comme +23
fait un 23 positif et elle objecte.
Le code fonctionne pour moi. (après l'ajout des clauses except
/import
manquantes)
Avez-vous mis \
Dans le code d'origine?
urlToVisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/' \
+ stock + '/chartdata;type=quote;range=5d/csv'
Si vous l'omettez, cela pourrait être une cause de l'exception:
>>> 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)
doit être str(e)
.