2013-12-15 5 views
13

मुझे पाइथन 2.7 में लिखे गए कोड के साथ कोई समस्या नहीं आ रही है। मैं इनट्स को संदर्भों में परिवर्तित कर रहा हूं, लेकिन मुझे एक प्रकार का अपवाद bad operand type for unary +: 'str' मिल रहा है। क्या कोई सहायता कर सकता है?यूनरी + के लिए खराब ऑपरेंड प्रकार: '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' मार रहा है जब वह हालांकि दोनों मूल्यों प्रिंट आउट तुलना की जा रही ints के रूप में जब परीक्षण किया if int(splitLine[0]) > int(lastUnix): लिए हो जाता है। क्या कोई मुझे कुछ प्रतिक्रिया दे सकता है? धन्यवाद!

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 में आता है की तरह पूछ रहे हैं, और वह आपत्ति नहीं।

+0

प्रतिक्रिया के लिए धन्यवाद, मेरे हिस्से पर बुरा गलतफहमी और इस के साथ गलत दिशा के लिए माफ़ी। आपकी मदद की सराहना करते हैं, मैं गलत चीज़ को देखते हुए थोड़ी देर बिताता हूं! :( – heinztomato

2

कोड मेरे लिए काम करता है:

यहाँ अपवाद प्रतिक्रिया है। (अनुपलब्ध except खंड/import कथन जोड़ने के बाद)

क्या आपने मूल कोड में \ रखा था?

>>> 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) होना चाहिए:

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

आप इसे छोड़ देते हैं, तो यह अपवाद का कारण हो सकता है।

+0

आपकी प्रतिक्रिया falsetru के लिए धन्यवाद, मैंने \ बाहर लिया और अभी भी ऑपरेंड त्रुटि प्राप्त कर रहा हूं। मेरे द्वारा इसका निर्धारण नहीं किया जा सकता। कार्यक्रम काम करता है लेकिन मुझे डर है कि ऑपरेंड त्रुटि लाइन के नीचे और अधिक समस्याएं पैदा करेगी, यह 'int (splitLine [0])> int (lastUnix): 'line पर ट्रिगरिंग करती है। बीमार फिक्स की तलाश में रहें, धन्यवाद! साथ ही, मैंने यह सबमिट करने के बाद सही देखा कि मैंने सचमुच स्ट्रिंग (ई) लिखा है, दोह! – heinztomato

+1

@heinztomato, कृपया अपने प्रश्न को पूर्ण ट्रेसबैक के साथ अपडेट करें। – falsetru

+0

देरी के लिए खेद है, कार्यक्रम चलाने के बाद यहां पूरा कोड और प्रतिक्रिया है। ऐसा लगता है कि इसे 'खींचा' प्रिंट करना है, लेकिन ऑपरेंड मुद्दा स्टॉक के बदले लौट रहा है, तो लूप अगले इनपुट पर जाता है। कोई विचार? आपकी सहायता के लिए एक बार फिर से धन्यवाद। – heinztomato

संबंधित मुद्दे