将读取用户输入文件的函数放入并使用异常循环

时间:2016-11-16 16:24:40

标签: python

该程序正在读取附有数字值的关键字文件。然后它正在读取包含纬度和经度以及推文文本的几千条推文的文件。您必须将推文排序到特定区域,然后根据第一个文档的关键字和值计算每个区域的情绪平均值。用户必须将这些输入到两个文件中,并且必须有一个带有异常错误的try语句。这些函数可以单独计算正确的值,但是当我把它放在try语句中时,我会得到这些错误:

回溯(最近一次调用最后一次):对于第129行main()和第16行sortKets(键)。最后一个错误行56关键字[lines [0]] = int(lines [1])IndexError:列表索引超出范围   我能做些什么来解决它?

列出项目

eastern = []
central = []
mountain = []
pacific = []
keyword = {}
easternsum =[]
centralsum= []
mountainsum = []
pacificsum = []
    def main() :
    done = False
    while not done:
        try:
            keys = input("Enter file: ")
            readkeys(keys)
            sortKeys(keys)

            tweets = input("Enter second file: ")
            readtweets(tweets)
            sorttweet(tweets)


            calcsentiment()
            print("The eastern amount of tweets is",len(easternsum))
            print("The eastern happiness score              is",sum(easternsum)/len(easternsum))
            print("The central amount of tweets is",len(centralsum))
        print("The central happiness score    is",sum(centralsum)/len(centralsum))
        print("The mountain amount of tweets is",len(mountainsum))
        print("The mountain happiness score is",sum(mountainsum)/len(mountainsum))
        print("The pacific amount of tweets is",len(pacificsum))
        print("The pacific happiness score is",sum(pacificsum)/len(pacificsum))
        done = True

    except IOError:
        print("Error, file not found.")

    except ValueError:
        print("Invalid file.")

    except RuntimeError as error:
        print("Error", str(error))



def readkeys(keys):
    keys = open(keys, "r")

def readtweets(tweets):
    tweets = open(tweets, "r")



def sortKeys(keys):
    for line in keys :
       lines = line.split(",")
       keyword[lines[0]] = int(lines[1])

def sorttweet(tweets) :
    for line in tweets :
        stuff = line.split(" ",5)
        long = float(stuff[0].strip("[,"))
        lat = float(stuff[1].strip('],'))
        tweet = stuff[5]
        if 24.660845 < long < 49.189787 and -87.518395 < lat < -67.444574 :
            eastern.append(tweet)
        if 24.660845 < long < 49.189787 and -101.998892 < lat < -87.518395 :
            central.append(tweet)
        if 24.660845 < long < 49.189787 and -115.236428 < lat < -101.998892 :
            mountain.append(tweet)
        if 24.660845 < long < 49.189787 and -125.242264 < lat < -115.236428 :
            pacific.append(tweet)




def calcsentiment():
    for tweet in eastern :
        tweetlist = tweet.split()
        count = 0
        tweetV = 0
        for word in tweetlist:
            if word in keyword :
                count = count + 1
                tweetV = tweetV + keyword[word]
        if count > 0:
            easternsum.append(tweetV / count)

for tweet in central:
    tweetlist2 = tweet.split()
    count = 0
    tweetV = 0
    for word in tweetlist2 :
        if word in keyword :
            count = count + 1
            tweetV = tweetV + keyword[word]
    if count > 0:
        centralsum.append(tweetV / count)


for tweet in mountain:
    tweetlist3 = tweet.split()
    count = 0
    tweetV = 0
    for word in tweetlist3 :
        if word in keyword :
            count = count + 1
            tweetV = tweetV + keyword[word]
    if count > 0:
        mountainsum.append(tweetV / count)

for tweet in pacific:
    tweetlist4 = tweet.split()
    count = 0
    tweetV = 0
    for word in tweetlist4 :
        if word in keyword :
            count = count + 1
            tweetV = tweetV + keyword[word]
    if count > 0:
        pacificsum.append(tweetV / count)
calcsentiment()







main()

1 个答案:

答案 0 :(得分:0)

你有问题:

def sortKeys(keys): 
    for line in keys : 
        lines = line.split(",") 
        keyword[lines[0]] = int(lines[1])

当你分割线时,你不会得到2个令牌,只有一个。 当您尝试拆分的行不包含“&#39;”时,会发生这种情况。字符。 尝试使用python控制台中的某些内容&#34; xxxx&#34; .split(&#34;,&#34;),你会看到结果是[&#34; xxxx&#34;],所以一个列表只是一个元素,而在您的代码行[1]尝试访问列表的第二个元素。