1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み] メインループの 'builtin_function_or_method' オブジェクトが反復可能でない

2022-01-10 12:35:45

質問

コードは次のとおりです。

import urllib2
import time
import datetime

stocksToPull = 'AAPL','GOOG','MSFT','CMG','AMZN','EBAY','TSLA'

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=5d/csv'
        saveFileLine = stock+'.txt'

        try:
            readExistingData = open(saveFileLine,'r').read()
            splitExisting = readExistingData.split('\n')
            mostRecentLine = splitExisting[-2]
            lastUnix = mostRecentLine.split(',')[0]
        except:
            lastUnix = 0

        saveFile = open(saveFileLine,'a')
        sourceCode = urllib2.urlopen(urlToVisit).read()
        splitSource = sourceCode.split

        for eachLine in splitSource:
            splitLine = eachLine.split(',')
            if len(splitLine) ==6:
                if splitLine[0] > lastUnix:
                    if 'values' not in eachLine:
                        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(300)

    except Exception,e:
        print 'main loop',str(e)

for eachStock in stocksToPull:
    pullData(eachStock)

実行すると、エラーが発生します。

main loop 'builtin_function_or_method' object is not iterable

誤字脱字をチェックしましたが、エラーは見つかりませんでした。

解決方法は?

直接回答

ここのコードで。

saveFile = open(saveFileLine,'a')
sourceCode = urllib2.urlopen(urlToVisit).read()
splitSource = sourceCode.split

変更 sourceCode.splitsourceCode.split() .


このエラーについて詳しく知りたい方は、以下をお読みください。

デバッグの際には、try...exceptブロック、特に"expect Exception"ブロックは、何が問題なのかわからなくなるほど汎用的なので、削除した方がよいでしょう。

try...exceptブロックを削除して再度実行すると、以下のようなエラー情報が得られます。

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-c4fe20f718cd> in <module>()
     43 
     44 for eachStock in stocksToPull:
---> 45     pullData(eachStock)

<ipython-input-5-c4fe20f718cd> in pullData(stock)
     23     splitSource = sourceCode.split
     24 
---> 25     for eachLine in splitSource:
     26         splitLine = eachLine.split(',')
     27         if len(splitLine) ==6:

TypeError: 'builtin_function_or_method' object is not iterable

エラーメッセージ TypeError: 'builtin_function_or_method' object is not iterable は25行目に関連付けられており、つまり splitSourcebuiltin_function_or_method であり、かつ iterable .

とは何ですか? splitSource ? それは sourceCode.split . ここで答えが出ます。メソッドを呼び出すには () そうしないと、メソッドそのものを取得することになります。メソッド str.split は明らかに iterable !