Я в ситуации, когда я беру пользовательский ввод и выполняю некоторые математические операции. Пользователь выбирает элемент из поля со списком и вводит число в строке редактирования рядом с ним. Когда он нажимает ОК, он возвращает (comboboxselectedvalue) + (lineeditvalue), он работает, большую часть времени, моя проблема в том, что когда пользователь оставляет lineedit пустым, он возвращает ошибку:
ValueError: недействительный буквальный для int() с базой 10: ''
cb1 = self.lineEdit.text()
zb1=self.comboBox.currentText()
az1 = int(cb1)
print(zb1+az1)
Как я могу установить значение редактирования строки равным 0, если ничего не введено и оставлено пустым? У меня есть 20 строковых правок и 20 полей со списком ..
1 ответ
Ваш код будет вызывать исключение всякий раз, когда пользователь вводит что-либо, кроме числа, включая вообще ничего.
Самый лучший способ справиться с этим - проверить запись (и предварительно заполнить ее чем-то допустимым, например 0
), чтобы они не могли нажать "ОК" с чем-то недопустимым в поле.
Но если вы хотите обработать это в коде «движка», а не в графическом интерфейсе, вы можете; это просто не будет таким приятным для пользователя.
Похоже, вы хотите рассматривать пустое поле как 0
. А что насчет непустой, но нечисловой записи? Следует ли это также рассматривать как 0
? Если так, то это просто; исключение уже улавливает именно то, что вы хотите уловить, поэтому вам просто нужно обработать его.
try:
az1 = int(cb1)
except ValueError:
az1 = 0
Если, с другой стороны, вы хотите обрабатывать нечисловые записи иначе, чем пустые, это немного сложнее; исключение объединяет их в одну кучу, поэтому вам понадобится тест if
вместо или в дополнение к исключению. Если, скажем, вы хотите, чтобы нечисловой текст прервал программу, как это происходит в настоящее время, но пустое поле означает 0, вы можете написать:
try:
az1 = int(cb1)
except ValueError:
if not az1:
az1 = 0
else:
raise
Или, короче:
az1 = int(cb1) if cb1 else 0
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.
if cb1 == "":
, вероятно, будет хорошим началом.