Я в ситуации, когда я беру пользовательский ввод и выполняю некоторые математические операции. Пользователь выбирает элемент из поля со списком и вводит число в строке редактирования рядом с ним. Когда он нажимает ОК, он возвращает (comboboxselectedvalue) + (lineeditvalue), он работает, большую часть времени, моя проблема в том, что когда пользователь оставляет lineedit пустым, он возвращает ошибку:

ValueError: недействительный буквальный для int() с базой 10: ''

cb1 = self.lineEdit.text()
zb1=self.comboBox.currentText()
az1 = int(cb1)
print(zb1+az1)

Как я могу установить значение редактирования строки равным 0, если ничего не введено и оставлено пустым? У меня есть 20 строковых правок и 20 полей со списком ..

0
user4714953 18 Май 2015 в 22:23
if cb1 == "":, вероятно, будет хорошим началом.
 – 
Kevin
18 Май 2015 в 22:28

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
1
abarnert 18 Май 2015 в 22:36