2013-12-15 13 views
13

Python 2.7で書かれたコードで問題が発生することはありません。私はint型への参照を変換していますが、型の例外bad operand type for unary +: 'str'が続きます。誰も助けることができますか?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) 

それは両方の値がテストint型としてプリントアウトを比較されているにもかかわらず、if int(splitLine[0]) > int(lastUnix):になったとき、私は、オペランド例外bad operand type for unary +: 'str'を打っています。誰も私にいくつかのフィードバックを与えることができますか?ありがとうございました!ここ

は例外応答です:

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'` 
+2

スタックトレースを失うため、例外をキャッチして印刷しないでください。 – Eric

答えて

16

あなたは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' 

のいずれかをしたいあなたは+23が正23を行い、彼女は反対しているように文字列に+シンボルを適用するためのPythonを求めています。

+0

フィードバックに感謝し、悪い誤解を私の側にして、この方針との誤った指摘をお詫び申し上げます。あなたの助けを感謝し、私は間違ったことを見ている間、過ごす! :( – heinztomato

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' 

ところで、string(e)str(e)でなければなりません。

+0

あなたのフィードバックfalsetruのためにありがとう、私は\アウトを取って、まだオペランドのエラーを受信して​​います。私はそれを把握できません。プログラムは動作しますが、オペランドのエラーによってさらに多くの問題が発生することが懸念されますが、 'if int(splitLine [0])> int(lastUnix):'行で引き続きトリガします。病気は修正を探し続けて、おかげで再び!また、私は文字通り文字列(e)を書いたことを提出した直後に気づいた。 – heinztomato

+1

@heinztomato、あなたの質問を完全なトレースバックで更新してください。 – falsetru

+0

遅れて申し訳ありませんが、ここでは完全なコードとプログラムの実行後の応答です。それは 'Pulled'を印刷するように見えるが、オペランドの問題は在庫の代わりに返されているので、ループは次の入力に行く。何か案は?もう一度あなたの助けに感謝します。 – heinztomato

関連する問題