Python не работает защищённый блок
Если в блоке 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
Ответы (1 шт):
Автор решения: tonysdev
→ Ссылка
Советую завести отдельную переменную в классе с именем 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 не везде нужны, в данном случае не вижу необходимости в нем.