[英]TypeError: unsupported operand type(s) for +=: 'int' and 'str'
I'm getting this error when reading from a file: 从文件读取时出现此错误:
line 70 in main: score += points
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
I'm taking an integer in the file and adding it to the variable score
. 我在文件中取一个整数,并将其添加到变量score
。 The reading from the file is done in the next_line
function which is then called in the next_block
function. 从文件读取是在next_line
函数中完成的,然后在next_block
函数中调用。
I have tried converting both score
and points
to an integer which doesn't seem to work. 我尝试将score
和points
都转换为似乎不起作用的整数。
Here's the program code: 这是程序代码:
# 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
is a string, because you read this from the file: points
是一个字符串,因为您是从文件中读取的:
points = next_line(the_file)
but score
is an integer: 但score
是整数:
score = 0
You can't add a string to an integer. 您不能将字符串添加到整数。 If the value you read from the file represents an integer number, you need to convert it first, using int()
: 如果从文件中读取的值表示整数,则需要先使用int()
对其进行转换:
score += int(points)
When receiving an error message, it can often reveal useful information about a problem... 收到错误消息时,它通常可以显示有关问题的有用信息...
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
is basically saying that one can't use the +=
operator (which can be simplified to +
) with the two different types of objects it received (string and integer, in your case). TypeError: unsupported operand type(s) for +=: 'int' and 'str'
基本上是说不能对接收到的两种不同类型的对象使用+=
运算符(可以简化为+
)字符串和整数(在您的情况下)。
Your points
object is of type integer, whilst your score
is a string (since it was read from a file). 您的points
对象是整数类型,而您的score
是一个字符串(因为它是从文件中读取的)。
To correct this, you must convert the string to an integer, allowing you to sum it with the other integer, this can be done using the int()
function. 若要更正此问题,您必须将字符串转换为整数,并允许将其与其他整数求和,这可以使用int()
函数完成。
tl;dr: type(1)
!= type('1')
tl; dr: type(1)
!= type('1')
you are trying to add int
and str
您正在尝试添加int
和str
score = int(score)
score += points
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.