我有一个程序,通过单击一个按钮来启动数据类型转换。我在按钮命令中使用了lambda函数。在转换开始之前,方法会检查是否已选择输入。现在,如果没有选择输入文件,我会在jupyter笔记本电脑中收到一条错误消息,这不一定是问题,因为无论如何都不应该开始数据类型转换。但是我问自己是否有办法阻止lambda函数的继续。我将添加一段代码,并进一步解释我的意思:
我的按钮命令:
self.program_start["command"]=lambda:[self.fileselectwarning(),self.writealldatafile(),self.writeselecteddata(),
self.inputliste.clear(),self.fileopeningcounter.set(0),
self.inputfilenamelist.clear()]
检查是否已选择输入/输出文件的方法:
def fileselectwarning(self):
stringliste=[self.fileopenname.get(),self.filesavename.get()]
if stringliste[0]=="" and not stringliste[1]=="":
self.messagebox1 = messagebox.showwarning("Missing Inputfile","No Inputfile selected, please select one and retry!")
elif not stringliste[0]=="" and stringliste[1]=="":
self.messagebox2 = messagebox.showwarning("Missing Outputfile","No Outputfilename selected, please select one and retry!")
elif stringliste[0]=="" and stringliste[1]=="":
self.messagebox3 = messagebox.showwarning("Missing Files","Neither Input nor Outputfile were selected, please select both and retry!")
elif not stringliste[0]=="" and not stringliste[1]=="":
ausfuehrenderdatenverarbeitung=self.zugriffaufdatenverarb()
因此,在我的方法fileselectwarning中,当同时选择了输入文件和输出文件时,将调用另一个方法,该方法将开始部分转换。然后调用按钮的lambda函数中的所有其他方法,这取决于通过“ fileselectwarning”方法调用的方法中创建的列表。但是,如果缺少输入或输出文件,则lambda函数会继续并且尚未创建这些列表,因此会产生错误。
要对此进行汇总,有没有办法阻止lambda函数继续 并在“ fileselectwarning”方法中实现它?
答案 0 :(得分:2)
编写常规函数,而不是在lambda表达式中滥用列表构造函数来调用函数。
为了中止执行,您可以使用由fileselectwarning
引发的自定义异常。该功能本身也可以简化。
class MissingFiles(Exception):
pass
class ...:
def fileselectwarning(self):
infile, outfile = self.fileopenname.get(), self.filesavename.get()
if not infile and outfile:
raise MissingFiles("No Inputfile selected, please select one and retry!")
elif infile and not outfile:
raise MissingFiles("No Outputfilename selected, please select one and retry!")
elif not infile and not outfile:
raise MissingFiles("Neither Input nor Outputfile were selected, please select both and retry!")
else:
ausfuehrenderdatenverarbeitung=self.zugriffaufdatenverarb()
def start_command(self):
try:
self.fileselectwarning()
except MissingFiles as e:
self.messagebox1 = messagebox.showwarning("Missing files", str(e))
return
self.writealldatafile()
self.writeselecteddata()
self.inputliste.clear()
self.fileopeningcounter.set(0)
self.inputfilenamelist.clear()
然后在分配命令时,请执行以下操作:
self.program_start["command"] = self.start_command
很明显,我无法对其进行测试,因此它可能不会立即起作用,但它显示了总体思路。