当我运行程序时,我从用户那里得到一个输入,然后将其分配给“dimensions”变量。输入只需要一个整数,我为一个ValueError引发一个异常,它起作用并告诉用户它不是一个整数。但是代码一直持续到“if”语句的下一行,其中变量维度现在需要为整数分配一个整数,并在控制台中读取错误,说“维度未分配” 我的问题是如何在引发异常时使其递归,因此在输入整数之前代码不会继续执行下一部分。 在控制台中工作时我可以通过再次调用函数使其递归,并且在这里我尝试再次调用funnction但这似乎没有帮助。
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)
游戏的另一部分当它试图通过接受来自用户的字符串(文件名)来加载我引发同样问题的IOError时,我需要它来显示消息但是没有做任何事情,直到它得到正确的文件名。
except IOError :
tkinter.messagebox.showinfo('Error:', 'Filename not recognized')
self.get_load_string()
答案 0 :(得分:0)
在之后移动except
代码,如果出现异常,则不得发生这些代码。如果您阅读了您所写的内容,请说尝试一下,如果有的话会发现异常,然后执行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()
答案 1 :(得分:0)
假设self.dimension_entry_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
。