Форум сайта python.su
Сделал графическую оболочку, запрашиваю напряжение (U) и длину (L). Если пользователь ничего не введет или введет не числа, то программа вылетает:
def proga_engl1(self): self.ui.textBrowser.clear() try: U = int(self.ui.U_line.text()) L = float(self.ui.L_line.text()) except: self.ui.LABEL_P.setText("Вы ввели не число") arr_engl1 = [9, 5, 43.7, 22.6, 47, 0.7, 0.3, 4.4] self.ui.LABEL_P.setText("Мощность лент в диапазоне \nот 10 до 100 Вт/м") arr_engl_list = [] for i in range(len(arr_engl1)): # Восемь параллель (запитка с двух сторон) P = round(((U * U) / (arr_engl1[i] / 8) / L) / L, 2) if (P > 10 and P < 100): P1 = round(P * L / 1000, 2) prn_name = ("ЭНГЛ-1-" + str(P1) + "/" + str(U) + "-" + str(L) + " | Мощность: " + str( P) + " | Проволока: " + str(arr_engl1[i]) + " Ом/м" + " <--- На две стороны") arr_engl_list.append(prn_name) # Восемь последовательно P = round(((U * U) / (arr_engl1[i] * 8) / L) / L, 2) if (P > 10 and P < 100): P1 = round(P * L / 1000, 2) prn_name = ("ЭНГЛ-1-" + str(P1) + "/" + str(U) + "-" + str(L) + " | Мощность: " + str( P) + " | Проволока: " + str(arr_engl1[i]) + " Ом/м") arr_engl_list.append(prn_name) # Два по четыре P = round(((U * U) / (arr_engl1[i] / 2) / L) / L, 2) if (P > 10 and P < 100): P1 = round(P * L / 1000, 2) prn_name = ("ЭНГЛ-1-" + str(P1) + "/" + str(U) + "-" + str(L) + " | Мощность: " + str( P) + " | Проволока: " + str(arr_engl1[i]) + " Ом/м") arr_engl_list.append(prn_name) # Два по четыре P = round(((U * U) / (arr_engl1[i] * 2) / L) / L, 2) if (P > 10 and P < 100): P1 = round(P * L / 1000, 2) prn_name = ("ЭНГЛ-1-" + str(P1) + "/" + str(U) + "-" + str(L) + " | Мощность: " + str( P) + " | Проволока: " + str(arr_engl1[i]) + " Ом/м") arr_engl_list.append(prn_name) for i in range(len(arr_engl_list)): self.ui.textBrowser.insertPlainText(arr_engl_list[i]) self.ui.textBrowser.insertPlainText("\n")
Офлайн
nikola_piterошибку закопипастите и сюда скинте
проверить вводимые пользователям данные или как обойти ошибку?
In [1]: # на вроде такого In [2]: 1231 / 0 --------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-2-1321584af767> in <module> ----> 1 1231 / 0 ZeroDivisionError: division by zero In [3]:
In [4]: try: ...: print(111 / 0) ...: except ZeroDivisionError: ...: print(0) ...: 0
In [3]: type('qwerty') Out[3]: str In [4]:
Отредактировано AD0DE412 (Янв. 6, 2021 19:03:08)
Офлайн
ошибку закопипастите и сюда скинтеа ошибка в том, что код продолжает исполняться и когда доходит до формулы
P = round(((U * U) / (arr_engl1[i] / 8) / L) / L, 2)
ну а если обойти .. то сделайте значения по умолчанию как вариантдефолтные значения не хотелось бы использовать, пользователь всегда может их удалить и выполнить код, получим вылет из программы.
вот у вас в коде есть try - except стало быть как обрабатывать исключения знаете ..честно говоря не знаю, мне подсказали на другом форуме такую конструкцию, но она не работает.
Отредактировано nikola_piter (Янв. 6, 2021 18:59:09)
Офлайн
In [4]: try: ...: print(111 / 0) ...: except ZeroDivisionError: ...: print(0) ...: 0
Офлайн
AD0DE412а желаемое поведение?
а ошибка в том, что код продолжает исполняться и когда доходит до формулы
except: self.ui.LABEL_P.setText("Вы ввели не число") return 1
Отредактировано AD0DE412 (Янв. 6, 2021 19:07:43)
Офлайн
nikola_piterРаботает оно, только у вас except не завершает метод, а просто выводит “Вы ввели не число” и ваша программа продолжает работать дальше. Вставте после self.ui.LABEL_P.setText(“Вы ввели не число”) выход из функции.
честно говоря не знаю, мне подсказали на другом форуме такую конструкцию, но она не работает.
[code python][/code]
Отредактировано PEHDOM (Янв. 6, 2021 19:15:01)
Офлайн
ааааааа как все просто!!!
Спасибо большое, return выручил!
Офлайн