Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2021 18:16:20

nikola_piter
Зарегистрирован: 2021-01-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка вводимых значений от пользователя

Сделал графическую оболочку, запрашиваю напряжение (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")

Подскажите, как проверить вводимые пользователям данные или как обойти ошибку?

Офлайн

#2 Янв. 6, 2021 18:48:44

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Проверка вводимых значений от пользователя

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]:



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Янв. 6, 2021 19:03:08)

Офлайн

#3 Янв. 6, 2021 18:58:32

nikola_piter
Зарегистрирован: 2021-01-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка вводимых значений от пользователя

ошибку закопипастите и сюда скинте
а ошибка в том, что код продолжает исполняться и когда доходит до формулы
 P = round(((U * U) / (arr_engl1[i] / 8) / L) / L, 2)
вылетает, т.к. тут используются U и L

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

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

Отредактировано nikola_piter (Янв. 6, 2021 18:59:09)

Офлайн

#4 Янв. 6, 2021 19:02:49

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Проверка вводимых значений от пользователя

  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
зы мной был немного поправлен мой предидущий коментарий



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#5 Янв. 6, 2021 19:04:45

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Проверка вводимых значений от пользователя

AD0DE412
а ошибка в том, что код продолжает исполняться и когда доходит до формулы
а желаемое поведение?
ну зделайте как то так
 except:
    self.ui.LABEL_P.setText("Вы ввели не число")
    return 1



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Янв. 6, 2021 19:07:43)

Офлайн

#6 Янв. 6, 2021 19:13:42

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Проверка вводимых значений от пользователя

nikola_piter
честно говоря не знаю, мне подсказали на другом форуме такую конструкцию, но она не работает.
Работает оно, только у вас except не завершает метод, а просто выводит “Вы ввели не число” и ваша программа продолжает работать дальше. Вставте после self.ui.LABEL_P.setText(“Вы ввели не число”) выход из функции.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 6, 2021 19:15:01)

Офлайн

#7 Янв. 6, 2021 19:17:05

nikola_piter
Зарегистрирован: 2021-01-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка вводимых значений от пользователя

ааааааа как все просто!!!
Спасибо большое, return выручил!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version