我用python 3 tkinter编写了此代码,这给了我一个错误

时间:2018-12-01 11:20:06

标签: python tkinter

total = sum(int(e.get()) for e in (feet_entry1, feet_entry2, feet_entry3))
def callback():
    global total
    l.configure(text= "The output MV is %s" % total, font='none 12 bold')

它显示了此错误

total = sum(int(e.get()) for e in (feet_entry1, feet_entry2, feet_entry3))
ValueError: invalid literal for int() with base 10: ''

1 个答案:

答案 0 :(得分:3)

调用feet_entry1时,feet_entry2feet_entry3''中的至少一个必须返回.get()

如果您在交互式提示中尝试,您将得到相同的错误:

>>> int('')
Traceback (most recent call last):
ValueError: invalid literal for int() with base 10: ''

您可以通过过滤掉空值来解决此问题:

sum(int(e.get()) for e in (feet_entry1, feet_entry2, feet_entry3)
    if e.get())

if e.get()会将值转换为布尔值。空字符串的值为False,因此将被忽略。

请参阅List Comprehensions的文档:

>>> vec = [-4, -2, 0, 2, 4]
>>> # filter the list to exclude negative numbers
>>> [x for x in vec if x >= 0]
[0, 2, 4]