如何修复函数tkinter的int浮点数

问题描述

因此,我正在尝试创建一个函数来检查用户是否输入了str内容,它将打印出一条错误消息,内容print("You can only use a number ranging from 1 - 4,setting minimum_offer to 1.")

但是当我运行我的代码时,它说这是错误代码

During handling of the above exception,another exception occurred:
Traceback (most recent call last):
  File "C:\Program Files\python38\lib\tkinter\__init__.py",line 1883,in __call__
    return self.func(*args)
  File "d:/Python Code stuff I did/print.py",line 218,in <lambda>
    button = Button(root,text="Change Config",width=20,height=3,bg="#0f0f0f",fg="#ffffff",command=lambda:[do_it(),do_it1(),do_it2(),do_it3(),do_the_it(),do_the_it1()])
  File "d:/Python Code stuff I did/print.py",line 42,in do_it
    userInput = number.get()
  File "C:\Program Files\python38\lib\tkinter\__init__.py",line 537,in get
    return int(self._tk.getdouble(value))
_tkinter.TclError: expected floating-point number but got "wa"

这是我的错误代码

number_1 = StringVar()
def do_the_it():
    userinput4 = number_1.get()
    try:
        int(userinput4)
        updater.read('settings.ini')
        updater['Trading Settings']['minimum_offer'].value = number_1.get()
        updater.update_file()
    except Exception as error:
        print("You can only use a number ranging from 1 - 4,setting minimum_offer to 1.")
        updater.read('settings.ini')
        updater['Trading Settings']['minimum_offer'].value = 1
        updater.update_file()

    updater.read('settings.ini')
    updater['Trading Settings']['maximum_offer'].value = number_2.get()
    updater.update_file()
    a = updater['Trading Settings']['minimum_offer'].value
    if int(number_1.get()) > 4:
        print("Number can only exceed to 4")
        updater.read('settings.ini')
        updater['Trading Settings']['minimum_offer'].value = 1
        updater.update_file()

解决方法

对于错误处理,您将必须检查是否实际上可以转换为int。您可以使用一个try-block。

accept = True
try:
    tmp = int(number_1.get())
except:
    accept = False

然后,如果accept为true,则只能执行第二部分(if块):

if accept:
    if int(number_1.get()) > 4:
        ### Rest of your code
else:
    print("Enter a number you joker")

,

您应将number_1.get()放在try块中:

def do_the_it():
    try:
        val = int(number_1.get())
        if not 1 <= val <= 4:
            raise ValueError
    except (ValueError,TclError):
        print('You can only use a number ranging from 1 - 4,setting minimum_offer to 1.')
        val = 1
    
    updater.read('settings.ini')
    updater['Trading Settings']['minimum_offer'].value = val
    updater.update_file()