1

嗨,我正在制作一个适用于不同用户的数学程序,然后将分数写入配置文件(.ini),但问题是当我尝试这样做时,我会收到一条错误消息:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files\Python33\lib\tkinter\__init__.py", line 1475, in __call__
    return self.func(*args)
  File "C:\Users\Public\Documents\Programming\Math-Bot\Math-Bot.py", line 105, in check
    config[user]['right'] = config[user]['right'] + int(1)
TypeError: Can't convert 'int' object to str implicitly

这是我用来决定他们的答案是对还是错的代码:

def check():
    if guess.get().lower() == str(no1 + no2):
        global ri
        answer.set('Right!')
        ri = ri + 1
        right.set(ri)
        config[user]['right'] = config[user]['right'] + int(1)
    else:
        global wa
        answer.set('Wrong, It Was ' + str(no1 + no2))
        wa = wa + 1
        wrong.set(wa)
        config[user]['wrong'] = config[user]['right'] + int(1)

无论如何我可以解决这个问题吗?

提前致谢!

4

2 回答 2

2

据我所知,config[user]['right']是一个字符串。如果是这样,你不能给它加 1,因为 1 是一个整数,字符串和整数不能加在一起。+运算符仅将两个相同类型的东西放在一起。所以,如果你想给 加 1 config[user]['right'],你必须先把它转换成这样的整数:

int(config[user]['right']) + 1

或者,如果您想将字符 1 放在 的末尾config[user]['right'],您必须首先使 1 成为这样的字符串:

config[user]['right'] + '1'
于 2013-07-13T23:53:42.507 回答
2

如果我正确理解了您的代码,那么您的配置值是一个代表数字的字符串,对吗?如果是这样,您应该首先将其解析为int(如 iCodez 建议的那样),然后添加它,最后再次将其格式化为字符串:

config[user]['right'] = str( int(config[user]['right']) + 1 )

这是必要的,因为 Python 是一种强类型语言:大多数时候,它不允许不同类型之间的操作(在本例中为intstr),要求程序员在应用常用运算符之前显式地将一个类型转换为另一个类型。

于 2013-07-13T23:56:29.020 回答