Python не работает защищённый блок

Рейтинг: 0Ответов: 1Опубликовано: 11.05.2023

Если в блоке except убрать break нужное сообщение печатается, но бесконечное число раз, в итоге программа зависает и на этом всё. Добавляя break, я ожидала, что после возникновения исключения программа выведет один раз 'Устройство ещё не подключено' и выйдет из цикла, однако она просто не видит блок except и редактор кода пишет, что он не достижим. Вот код, помогите исправить

def toggle_recording_state(self,instance):
    while True:
        try:
            if self.btn_record.text == 'Запись':
                self.btn_record.text = 'Стоп'
                sampling_frequency = 1024
                self.file_path = None
                self.edf_writer = pyedflib.EdfWriter('temp.edf',self.channels,file_type=pyedflib.FILETYPE_EDFPLUS)
                Clock.schedule_interval(self.save_data, 1 / sampling_frequency)
            else:
                # Остановить запись данных
                self.edf_writer.close()
                self.file_chooser.path = "~/"
                self.file_chooser.filters = [lambda folder, filename: filename.endswith('.edf')]
                self.file_chooser.popup()
                self.btn_record.text = "Запись"
                Clock.unschedule(self.save_data)
        except:
            print('Устройство ещё не подключено')
            break

Ответы

▲ 0

Советую завести отдельную переменную в классе с именем device, тогда будет намного удобнее работать с самим устройством.

Вот реализация, которую я считаю правильной:

def toggle_recording_state(self, instance):
    if self.device.is_connected():
        if self.btn_record.text == "Запись":
            self.btn_record.text = "Стоп"

            self.file_path = None

            self.edf_writer = pyedflib.EdfWriter("temp.edf", self.channels, file_type=pyedflib.FILETYPE_EDFPLUS)

            sampling_frequency = 1024
            Clock.schedule_interval(self.save_data, 1 / sampling_frequency)
        elif self.btn_record.text == "Стоп":
            self.btn_record.text = "Запись"

            self.file_chooser.path = "~/"
            self.file_chooser.filters = [lambda folder, filename: filename.endswith(".edf")]
            self.file_chooser.popup()

            self.edf_writer.close()

            Clock.unschedule(self.save_data)
        else:
            # Обработать нестандартное поведение кнопки(или не обрабатывать:|)
            pass
    else:
        print('Устройство ещё не подключено')

Бесконечные циклы в gui не везде нужны, в данном случае не вижу необходимости в нем.