Найти - Пользователи
Полная версия: Проверка вводимых значений от пользователя
Начало » Python для новичков » Проверка вводимых значений от пользователя
1
nikola_piter
Сделал графическую оболочку, запрашиваю напряжение (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")

Подскажите, как проверить вводимые пользователям данные или как обойти ошибку?
AD0DE412
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]:

ну а если обойти .. то сделайте значения по умолчанию как вариант
или
вот у вас в коде есть try - except стало быть как обрабатывать исключения знаете ..
 In [4]: try:
   ...:     print(111 / 0)
   ...: except ZeroDivisionError:
   ...:     print(0)
   ...:
0

ну еще есть .. эээ проверка типа type()
 In [3]: type('qwerty')
Out[3]: str
In [4]:
nikola_piter
ошибку закопипастите и сюда скинте
а ошибка в том, что код продолжает исполняться и когда доходит до формулы
 P = round(((U * U) / (arr_engl1[i] / 8) / L) / L, 2)
вылетает, т.к. тут используются U и L

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

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

AD0DE412
  In [4]: try:
   ...:     print(111 / 0)
   ...: except ZeroDivisionError:
   ...:     print(0)
   ...:
0
https://pythonworld.ru/tipy-dannyx-v-python/isklyucheniya-v-python-konstrukciya-try-except-dlya-obrabotki-isklyuchenij.html
зы мной был немного поправлен мой предидущий коментарий
AD0DE412
AD0DE412
а ошибка в том, что код продолжает исполняться и когда доходит до формулы
а желаемое поведение?
ну зделайте как то так
 except:
    self.ui.LABEL_P.setText("Вы ввели не число")
    return 1
PEHDOM
nikola_piter
честно говоря не знаю, мне подсказали на другом форуме такую конструкцию, но она не работает.
Работает оно, только у вас except не завершает метод, а просто выводит “Вы ввели не число” и ваша программа продолжает работать дальше. Вставте после self.ui.LABEL_P.setText(“Вы ввели не число”) выход из функции.
nikola_piter
ааааааа как все просто!!!
Спасибо большое, return выручил!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB