При получении значения из Entry выскакивает ошибка

У меня есть программа которая рассчитывает индекс массы тела. При получении значения из Entry выскакивает ошибка: ValueError: invalid literal for int() with base 10: '' не подскажете?

Вот код:

from tkinter import *

root = Tk()

label1 = Label(text="Введите вес (кг):")
weight = Entry(root)

label2 = Label(text="Введите рост (см):")
height = Entry(root)

w = int(weight.get())
h = int(height.get())

print(w)
print(h)

root.mainloop()

Ответы (2 шт):

Автор решения: vanyavanya

У вас изначально пустая строка при вводе, поэтому и ошибка конвертации в int. То есть как такового ввода, в данном примере, нет. Это равносильно тому, что я напишу код ниже и попытаюсь его запустить:

print(int(' '))
→ Ссылка
Автор решения: gil9red

У вас поля Entry не заполнены, поэтому при запросе значения из них вернулись пустые строки (''), что привело к ошибке при попытке привести их к числу.

Вам нужно проверять значения, например, через отлов исключения, что будет выброшено из int, если переданная в него строка не может быть конвертирована в число.

В качестве примера добавил кнопку при нажатии на которую будет выполняться получение значения из weight и height с приведением их к числу и проверкой.

Пример:

from tkinter import *
from tkinter import messagebox


def on_button_clicked():
    try:
        w = int(weight.get())
        h = int(height.get())

    except ValueError:
        messagebox.showwarning("Warning", 'Поля вес и рост должны быть заполнены числами')
        return

    print(w)
    print(h)


root = Tk()

label1 = Label(text="Введите вес (кг):")
weight = Entry(root)

label2 = Label(text="Введите рост (см):")
height = Entry(root)

button = Button(root, text="Ok", command=on_button_clicked)

label1.pack()
weight.pack()
label2.pack()
height.pack()
button.pack()

root.mainloop()
→ Ссылка