【问题标题】:TypeError: unsupported operand type(s) for +=: 'int' and 'str'. I have been trying to debug this error for 20 minutes类型错误:+= 不支持的操作数类型:“int”和“str”。我一直在尝试调试此错误 20 分钟
【发布时间】:2021-04-03 14:17:59
【问题描述】:

我所做的一切似乎都不起作用。我点击了关于该主题的 10 个链接,但没有任何东西可以解决我的问题。抱歉,代码太长了。

from tkinter import *


numbers = {}


root = Tk()

root.title("Calculator")


display_numbers = Entry(root, width=30)

display_numbers.grid(column=0, row=0, columnspan=2)


def clicked_number(value):
    print(value)
    display_numbers.insert(len(display_numbers.get()), value)


def clicked_clear():
    print("cleared")
    display_numbers.delete(0, END)


def clicked_add():
    print("added")
    display_numbers.delete(0, END)
    number = display_numbers.get()
    numbers[len(numbers)] = number


def clicked_equals():
    summed = 0
    for number in numbers:
        summed += str(numbers.get(number))
    display_numbers.delete(0, END)
    display_numbers.insert(0, summed)


button_1 = Button(root, text="1", padx=40, pady=30, command=lambda: clicked_number(1))
button_2 = Button(root, text="2", padx=40, pady=30, command=lambda: clicked_number(2))
button_3 = Button(root, text="3", padx=40, pady=30, command=lambda: clicked_number(3))

button_4 = Button(root, text="4", padx=40, pady=30, command=lambda: clicked_number(4))
button_5 = Button(root, text="5", padx=40, pady=30, command=lambda: clicked_number(5))
button_6 = Button(root, text="6", padx=40, pady=30, command=lambda: clicked_number(6))

button_7 = Button(root, text="7", padx=40, pady=30, command=lambda: clicked_number(7))
button_8 = Button(root, text="8", padx=40, pady=30, command=lambda: clicked_number(8))
button_9 = Button(root, text="9", padx=40, pady=30, command=lambda: clicked_number(9))

button_0 = Button(root, text="0", padx=40, pady=30, command=lambda: clicked_number(0))
button_clear = Button(root, text="Clear", padx=80, pady=30, command=clicked_clear)

button_add = Button(root, text="+", padx=40, pady=30, command=clicked_add)
button_equals = Button(root, text="=", padx=40, pady=30, command=clicked_equals)


button_7.grid(column=0, row=1)
button_8.grid(column=1, row=1)
button_9.grid(column=2, row=1)

button_4.grid(column=0, row=2)
button_5.grid(column=1, row=2)
button_6.grid(column=2, row=2)

button_1.grid(column=0, row=3)
button_2.grid(column=1, row=3)
button_3.grid(column=2, row=3)

button_0.grid(column=0, row=4)
button_clear.grid(column=1, row=4, columnspan=2)

button_add.grid(column=0, row=5)
button_equals.grid(column=1, row=5)


root.mainloop()

这是完整的错误信息:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\itsuw\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "C:/Users/itsuw/PycharmProjects/tkintercalc/main.py", line 37, in clicked_equals
    summed += str(numbers.get(number))
TypeError: unsupported operand type(s) for +=: 'int' and 'str'

【问题讨论】:

  • 从错误消息中很明显您传递了一个不正确的值;检查您传递 int 值或字符串值的所有位置,以确保这就是要传递的内容

标签: python tkinter typeerror


【解决方案1】:
summed = 0
for number in numbers:
    summed += str(numbers.get(number))

您将summed 显式初始化为int。然后你尝试向它添加显式转换strs。您要么需要以''(或其他一些str)开头并连接strs,要么以0(或其他一些int)开头并添加ints,选择一个。

【讨论】:

    【解决方案2】:

    您将 numbers.get(number) 转换为字符串,然后在 int 上使用 +=。

    summed += str(numbers.get(number)) 更改为summed += numbers.get(number)

    【讨论】:

      猜你喜欢
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 2017-05-27
      • 2020-05-23
      • 2018-02-05
      相关资源
      最近更新 更多