2013-12-15 35 views
13

Tôi không thể tìm ra một vấn đề tôi đang gặp phải với mã được viết bằng Python 2.7. Tôi đang chuyển đổi các tham chiếu sang int, nhưng tôi tiếp tục nhận được một ngoại lệ loại bad operand type for unary +: 'str'. Bất cứ ai có thể hỗ trợ?Loại toán hạng hạng nặng cho đơn nhất +: '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) 

Tôi đánh các toán hạng ngoại lệ bad operand type for unary +: 'str' khi nó được cho if int(splitLine[0]) > int(lastUnix): mặc dù cả hai giá trị được so sánh in ra như ints khi thử nghiệm. bất cứ ai có thể cho tôi một số thông tin phản hồi? cảm ơn bạn!

đây là phản ứng ngoại lệ:

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

Không chỉ bắt ngoại lệ để in nó, bởi vì bạn mất dấu vết ngăn xếp! – Eric

Trả lời

16

Bạn nói rằng if int(splitLine[0]) > int(lastUnix): đang gây ra sự cố, nhưng bạn không thực sự hiển thị bất kỳ điều gì gợi ý điều đó. Tôi cho rằng dòng này là vấn đề thay thế:

print 'Pulled', + stock 

Bạn có thấy tại sao dòng này có thể gây ra thông báo lỗi không? Bạn muốn một trong hai

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

hoặc

>>> print 'Pulled ' + stock 
Pulled AAAA 

không

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

Bạn đang yêu cầu Python để áp dụng các biểu tượng + thành một chuỗi như +23 làm cho một dương 23, và cô ấy phản đối.

+0

cảm ơn bạn đã phản hồi, sai lầm xấu về phía tôi và xin lỗi vì sự nhầm lẫn với điều này. Đánh giá cao sự giúp đỡ của bạn, tôi dành một thời gian nhìn vào điều sai trái! :( – heinztomato

2

Mã này làm việc cho tôi. (sau khi thêm thiếu điều khoản except/import báo cáo)

Bạn đã đặt \ trong mã ban đầu?

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

Nếu bạn bỏ qua nó, nó có thể là một nguyên nhân của ngoại lệ:

>>> 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) nên str(e).

+0

cảm ơn falsetru phản hồi của bạn, tôi đã lấy \ ra và vẫn nhận được lỗi toán hạng. tôi không thể hiểu được. Chương trình hoạt động nhưng tôi sợ lỗi toán hạng sẽ gây ra nhiều vấn đề hơn nữa xuống dòng, nó giữ kích hoạt tại 'if int (splitLine [0])> int (lastUnix):' line. bệnh tiếp tục tìm kiếm sửa chữa, cảm ơn một lần nữa! Ngoài ra, tôi nhận thấy ngay sau khi gửi rằng tôi nghĩa đen đã viết chuỗi (e), doh! – heinztomato

+1

@heinztomato, Vui lòng cập nhật câu hỏi của bạn với phần truy nguyên đầy đủ. – falsetru

+0

xin lỗi vì sự chậm trễ, đây là mã hoàn chỉnh và phản hồi sau khi chạy chương trình. nó dường như làm cho nó in 'Kéo' nhưng vấn đề toán hạng đang trở lại thay vì cổ phiếu, sau đó vòng lặp đi đến đầu vào tiếp theo. bất kỳ ý tưởng? Cảm ơn một lần nữa vì sự giúp đỡ của bạn. – heinztomato

Các vấn đề liên quan