我处于用户输入并进行一些数学运算的情况下。用户从组合框中选择一个项目,并在其旁边的行编辑中输入一个数字。当他点击ok时,它返回(comboboxselectedvalue)+(lineeditvalue),它的工作原理,大部分时间,我的问题是,当用户将lineedit留空时,它会返回错误:
ValueError:基数为10的int()的文字无效:''
cb1 = self.lineEdit.text()
zb1=self.comboBox.currentText()
az1 = int(cb1)
print(zb1+az1)
当没有输入任何内容并留空时,如何将行编辑的值设置为0?我有20行编辑和20个组合框..
答案 0 :(得分:1)
每当用户输入任何不是数字的内容时,您的代码都会引发异常 - 包括什么都没有。
处理此问题的最好方法是验证条目(并使用有效的内容(例如0
)预先填写条目,这样他们就无法点击“确定”,框中的内容无效。
但是如果你想在“引擎”代码而不是在GUI中处理这个问题,你可以;它不会像用户体验那样好。
听起来你想做的就是将空框视为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