Выход из лямбда-выражения через другой метод - PullRequest
0 голосов
/ 09 января 2019

У меня есть программа, которая запускает преобразование типов данных, нажав кнопку. Я использую лямбда-функцию для моей команды кнопки. Перед началом преобразования метод проверяет, был ли выбран вход или нет. Теперь, если не был выбран входной файл, я получаю сообщение об ошибке в блокноте jupyter, что не обязательно является проблемой, поскольку преобразование типа данных не должно начинаться в любом случае. Все же я спрашиваю себя, есть ли способ остановить продолжение лямбда-функции. Я добавлю фрагмент моего кода и объясню, что я имею в виду:

Моя команда кнопки:

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, когда были выбраны и входной, и выходной файлы, вызывается другой метод, который запускает часть преобразования. и затем будут вызваны все другие методы в лямбда-функции моей кнопки, которые зависят от списков, созданных в методе, который был вызван моим методом fileselectwarning. НО, если входной или выходной файл отсутствуют, лямбда-функция продолжается, и эти списки не были созданы, поэтому возникает ошибка.

Чтобы округлить это, есть ли способ остановить продолжение лямбда-функции и реализовать его в методе fileselectwarning?

1 Ответ

0 голосов
/ 09 января 2019

Вместо использования конструктора списка в лямбда-выражении для вызова функций как побочного эффекта, напишите обычную функцию.

Чтобы прервать выполнение, вы можете использовать пользовательское исключение, которое увеличивается на 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

Очевидно, что я не смог проверить это, поэтому это может не сработать сразу, но это показывает общую идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...