Python:Tkinter:中断按钮命令调用

Python:Tkinter:中断按钮命令调用,python,tkinter,return,break,Python,Tkinter,Return,Break,在Tkinter中,是否有可能中断到按钮上的回调。我有一段代码,如果用户犯了错误,它将在其中的特定部分导致错误,但是它位于嵌套在另一个for循环和while循环中的for循环中,可以是2个或3个函数深(这些函数的返回被操作) 我想做的是在发现此错误时返回mainloop() 所以代码看起来有点像: from Tkinter import * def func_call(val_list): y = [] for nn in range(len(val_list)):

在Tkinter中,是否有可能中断到按钮上的回调。我有一段代码,如果用户犯了错误,它将在其中的特定部分导致错误,但是它位于嵌套在另一个for循环和while循环中的for循环中,可以是2个或3个函数深(这些函数的返回被操作)

我想做的是在发现此错误时返回mainloop()

所以代码看起来有点像:

from Tkinter import *
def func_call(val_list):
    y = []
    for nn in range(len(val_list)):
       if val_list[nn] < 0:
          print('You entered a value that was too low.')
          break
       else:
          y.append(val_list[nn]+5)
    return(y)
def Button_callback(value):
    val_list = [value,value-1,value-2,value-3]
    y = func_call(val_list)
    for nn in range(len(val_list)):
        print(y[nn])
root = Tk()
Button(root,text='Press me',command=lambda: Button_callback(1)).grid(row=0,column=0) 
root.mainloop()
从Tkinter导入*
def func_调用(val_列表):
y=[]
对于范围内的nn(len(val_列表)):
如果val_列表[nn]<0:
打印('您输入的值太低')
打破
其他:
y、 附加(val_列表[nn]+5)
返回(y)
def按钮_回调(值):
val_list=[value,value-1,value-2,value-3]
y=函数调用(值列表)
对于范围内的nn(len(val_列表)):
打印(y[nn])
root=Tk()
按钮(root,text='Press me',command=lambda:Button_callback(1)).grid(行=0,列=0)
root.mainloop()
这样做的目的是确定值太低,然后中断for循环,然后将变量“y”返回到上一个函数,该函数随后立即发出错误,因为它希望“y”与“val_list”的长度相同

我想让它做的是有效地返回到按钮按下状态,因此在“func_call”和“button_callback”中只显示“您输入的值太低”作为错误消息


有什么建议吗?

这个问题与Tkinter没有多大关系,它只是一个正常的控制流问题。通常,处理这样一种情况的方法是抛出一个异常,因为异常将向上传播,直到有东西捕获它为止

例如:

def func_call(val_list):
    ...
    if val_list[nn] < 0:
        raise ValueError("value too low")
...
def Button_callback(value):
    ...
    try:
        y = func_call(val_list)
    except ValueError:
        return 
def func_调用(val_列表):
...
如果val_列表[nn]<0:
提升值错误(“值过低”)
...
def按钮_回调(值):
...
尝试:
y=函数调用(值列表)
除值错误外:
返回

也许您可以只返回None,或者返回空列表y,而不是中断。这有问题吗?

我仍然会得到一个“IndexError:list index out out range”(索引器:列表索引超出范围)错误-实际代码比我在这里给出的广泛示例要复杂得多,但事实是,更高的函数希望看到一定大小的列表,然后对其进行处理。