类型错误:不支持的操作数类型(一个或多个)为+ =:“INT”和“STR”

问题描述:

从文件中读取当我发现了这样的错误:类型错误:不支持的操作数类型(一个或多个)为+ =:“INT”和“STR”

line 70 in main: score += points 
TypeError: unsupported operand type(s) for +=: 'int' and 'str' 

我正在在文件中的整数并将其添加到变量score。从文件读取在next_line函数中完成,然后在next_block函数中调用该函数。

我已经尝试将scorepoints转换为似乎不起作用的整数。

下面是程序代码:

# Trivia Challenge 
# Trivia game that reads a plain text file 

import sys 

def open_file(file_name, mode): 
    """Open a file.""" 
    try: 
     the_file = open(file_name, mode) 
    except IOError as e: 
     print("Unable to open the file", file_name, "Ending program.\n",e) 
     input("\n\nPress the enter key to exit.") 
     sys.exit() 
    else: 
     return the_file 

def next_line(the_file): 
    """Return next line from the trivia file, formatted.""" 
    line = the_file.readline() 
    line = line.replace("/", "\n") 
    return line 

def next_block(the_file): 
    """Return the next block of data from the trivia file.""" 
    category = next_line(the_file) 

    question = next_line(the_file) 

    answers = [] 
    for i in range(4): 
     answers.append(next_line(the_file)) 

    correct = next_line(the_file) 
    if correct: 
     correct = correct[0] 

    explanation = next_line(the_file) 

    points = next_line(the_file) 

    return category, question, answers, correct, explanation, points 

def welcome(title): 
    """Welcome the player and get his/her name.""" 
    print("\t\tWelcome to Trivia Challenge!\n") 
    print("\t\t", title, "\n") 

def main(): 
    trivia_file = open_file("trivia.txt", "r") 
    title = next_line(trivia_file) 
    welcome(title) 
    score = 0 

    # get first block 
    category, question, answers, correct, explanation, points = next_block(trivia_file) 
    while category: 
     # ask a question 
     print(category) 
     print(question) 
     for i in range(4): 
      print("\t", i + 1, "-", answers[i]) 

     # get answer 
     answer = input("What's your answer?: ") 

     # check answer 
     if answer == correct: 
      print("\nRight!", end= " ") 
      score += points 
     else: 
      print("\nWrong.", end= " ") 
     print(explanation) 
     print("Score:", score, "\n\n") 

     # get next block 
     category, question, answers, correct, explanation, points = next_block(trivia_file) 

    trivia_file.close() 

    print("That was the last question!") 
    print("Your final score is", score) 

main() 
input("\n\nPress the enter key to exit.") 

points是一个字符串,因为你从文件中读取这样的:

points = next_line(the_file) 

score是一个整数:

score = 0 

你不能将字符串添加到整数。如果从文件中读取值代表一个整数,你需要将其先转换,使用int()

score += int(points) 
+0

谢谢,这个工作。我试图将函数调用转换为一个整数,这就是为什么它不起作用 – kieranw

当接收到错误信息,它往往可以揭示一个问题有用的信息...
TypeError: unsupported operand type(s) for +=: 'int' and 'str'基本上是说不能使用+=运算符(它可以简化为+)与它接收的两种不同类型的对象(在你的情况下是字符串和整数)。
您的points对象的类型为integer,而您的score是一个字符串(因为它是从文件读取的)。

要解决此问题,您必须将字符串转换为整数,以便将其与另一个整数相加,这可以使用int()函数完成。

TL;博士:type(1) = type('1')

+0

谢谢你的解释,现在是有道理的:) – kieranw

您尝试添加intstr

score = int(score) 
score += points