Python 如何在GUI中使用ValueError异常执行正确的递归

Python 如何在GUI中使用ValueError异常执行正确的递归,python,exception-handling,Python,Exception Handling,当我运行程序时,我从用户那里得到一个输入,然后将其分配给“dimensions”变量。输入只需要是一个整数,我为ValueError引发了一个异常,它可以工作并告诉用户它不是整数。但代码继续到“if”语句的下一行,其中变量维度现在需要分配一个整数,并在控制台中读取一个错误,称“维度未分配” 我的问题是,当引发异常时,如何使其递归,以便在输入整数之前代码不会一直执行到下一部分。 在控制台中工作时,我可以通过再次调用函数使其递归,在这里我尝试再次调用函数,但这似乎没有帮助 def grid_dime

当我运行程序时,我从用户那里得到一个输入,然后将其分配给“dimensions”变量。输入只需要是一个整数,我为ValueError引发了一个异常,它可以工作并告诉用户它不是整数。但代码继续到“if”语句的下一行,其中变量维度现在需要分配一个整数,并在控制台中读取一个错误,称“维度未分配” 我的问题是,当引发异常时,如何使其递归,以便在输入整数之前代码不会一直执行到下一部分。 在控制台中工作时,我可以通过再次调用函数使其递归,在这里我尝试再次调用函数,但这似乎没有帮助

def grid_dimensions(self) :
    global dimensions

### Assigns the value entered by the user to a variable for grid dimensions.
    try :
        dimensions = int(self.dimension_entry_box.get())

    except ValueError :
        tkinter.messagebox.showinfo('Error:', 'Input is not an Integer!')
        self.new_game()

### checks if the dimensions entered by the user are within the specified values,
### maximum or minimum dimensions if true displays a message to the user. 
    if (dimensions < gomoku_grid.MIN_DIMENSIONS or dimensions > gomoku_grid.MAX_DIMENSIONS) :
        self.message_label['text'] = "Invalid Dimensions - must be 5-16"
        return  
    else :
        self.log_grid = Gum_Gum_Grid(dimensions)

移动到发生异常时不能发生的代码之后。如果你读了你写的东西,你说试试看,如果有异常,抓住它,然后做
If…else
不管:

def grid_dimensions(self) :
    global dimensions

    ### Assigns the value entered by the user to a variable for grid dimensions.
    try :
        dimensions = int(self.dimension_entry_box.get())


        ### checks if the dimensions entered by the user are within the specified values,
        ### maximum or minimum dimensions if true displays a message to the user. 
        if (dimensions < gomoku_grid.MIN_DIMENSIONS or dimensions > gomoku_grid.MAX_DIMENSIONS) :
            self.message_label['text'] = "Invalid Dimensions - must be 5-16"
            return  
        else :
            self.log_grid = Gum_Gum_Grid(dimensions)

    ### Note - Moved
    except ValueError :
        tkinter.messagebox.showinfo('Error:', 'Input is not an Integer!')
        self.new_game()
def网格尺寸(自):
全球维度
###将用户输入的值指定给轴网尺寸的变量。
尝试:
dimensions=int(self.dimension\u entry\u box.get())
###检查用户输入的尺寸是否在指定值内,
###最大或最小尺寸(如果为真)向用户显示消息。
如果(尺寸gomoku\u grid.MAX\u尺寸):
self.message_标签['text']=“无效维度-必须为5-16”
返回
其他:
self.log\u grid=Gum\u Gum\u grid(尺寸)
###注释-已移动
除值错误外:
tkinter.messagebox.showinfo('错误:','输入不是整数!')
self.new_game()

假设self.dimension\u entry\u box.get()提示用户输入值,请尝试以下操作:

while True:
    try :
        dimensions = int(self.dimension_entry_box.get())
        break
    except ValueError :
        tkinter.messagebox.showinfo('Error:', 'Input is not an Integer!')

这也避免了捕获由无效输入以外的任何原因引起的
ValueError
s。

Thannks用于输入,但我尝试了此操作,控制台仍会继续读取代码,并意识到维度未定义。在python 3中,有没有一种方法可以生成一个if语句,该语句会说:“if dimensions not a integer display this error else contnue”这意味着一种比较变量并检查其是否为整数的方法?希望您在用上述while循环替换它时删除了递归?这仍然无法修复错误。代码继续执行if语句,但不带整数。谢谢你的意见。
while True:
    try :
        dimensions = int(self.dimension_entry_box.get())
        break
    except ValueError :
        tkinter.messagebox.showinfo('Error:', 'Input is not an Integer!')